Pada contoh NerdDinner dari Professional ASP.NET MVC 1.0 ada metode untuk membuat makan malam baru seperti disalin di bawah ini (halaman 89 dari versi NerdDinner gratis).
Di sana ia memeriksa ModelState.IsValid benar. Tampaknya untuk memeriksa apakah model itu valid untuk database (yaitu, ia menangkap konversi tipe data, seperti tanggal dengan format yang tidak valid, tetapi bukan aturan bisnis). Benarkah itu?
Saat mengirimkan formulir, jika Anda memiliki kesalahan dalam tanggal, ModelState.IsValid akan salah dan Anda akan mendapatkan kembali kesalahan, tetapi hanya untuk tanggal karena AddRuleViolations tidak pernah dieksekusi. Jika Anda menghapus centang untuk ModelState.IsValid sepenuhnya, maka Anda akan mendapatkan semua kesalahan (karena pengecualian), termasuk menandai pada tanggal ketika itu tidak valid. Lalu, mengapa cek untuk ModelState.IsValid ada sama sekali? Apakah saya melewatkan sesuatu?
//
// POST: /Dinners/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) {
if (ModelState.IsValid) {
try {
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new {id = dinner.DinnerID });
} catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
}
}
return View(dinner);
}
sumber
var errors = ModelState.Values.SelectMany(v => v.Errors);
dengan titik istirahat untuk melihat masalah validasi apa pun.Dari Errata:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Seharusnya:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Referensi: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611 , descCd- ERRATA.html
sumber
AddModelErrors
metode ini tidak ada.ModelState.AddModelErrors()
metode ini adaModelState.AddModelError
ada.Ya, Jared dan Kelly Orr benar. Saya menggunakan kode berikut seperti dalam pengecualian edit.
dari pada
sumber
Semua bidang model yang memiliki tipe pasti, yang harus divalidasi ketika dikembalikan ke Controller. Jika salah satu bidang model tidak cocok dengan tipe yang ditentukan, maka ModelState.IsValid akan mengembalikan false. Karena, kesalahan ini akan ditambahkan di ModelState.
sumber