Saya memeriksa basis data saya Create(FooViewModel fvm){...}
untuk melihat apakah fvm.prop1
dan fvm.prop2
sudah ada dalam kombinasi itu; jika demikian, saya ingin menambahkan kesalahan ke modelstate, lalu kembalikan seluruh tampilan. Saya mencoba:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... tapi saya tidak mendapatkan tampilan kesalahan dalam Html.ValidationSummary
, di situlah saya menganggap mereka akan muncul. Saya curiga "Model" bukan kunci yang tepat, tetapi saya belum dapat menemukan apa pun ala Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Scott Baker
sumber
sumber
Jawaban:
Saya akhirnya menemukan contoh penggunaan yang saya cari - untuk menetapkan kesalahan pada Model secara umum, bukan salah satu sifatnya, seperti biasa Anda sebut:
tetapi gunakan string kosong untuk kunci:
Pesan kesalahan akan muncul dengan sendirinya
<%: Html.ValidationSummary() %>
seperti yang Anda harapkan.sumber
ModelState.AddError(errorMessage)
atauModelState.AddGlobalError(errorMessage)
... itu akan menjadi intuitif dan lebih mudah untuk mengetahui cara menambahkan pesan kesalahan yang tidak terkait dengan properti model mana pun.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
berlebihan akan menampilkan semua kesalahan validasi jika argumen adalah palsu atau hanya non-properti-spesifik (key = "") kesalahan jika argumen adalah benar.Anda dapat menambahkan kesalahan model pada properti apa pun dari model Anda, saya sarankan jika tidak ada yang terkait dengan membuat properti baru.
Sebagai contoh, kami memeriksa apakah email sudah digunakan dalam DB dan menambahkan kesalahan ke properti Email dalam tindakan sehingga ketika saya mengembalikan tampilan, mereka tahu bahwa ada kesalahan dan cara menampilkannya dengan menggunakan
dan
sumber
(m=>m.email).SomeMagicToString()
?nameof
Operator datang C # 6.0 memecahkan masalah string yang ajaib ini. msdn.microsoft.com/en-us/magazine/dn802602.aspxMenempatkan properti model dot dalam string berhasil bagi saya:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
sumber