Я проверяю свою базу данных, Create(FooViewModel fvm){...}
чтобы увидеть, существует ли fvm.prop1
и fvm.prop2
уже в этой комбинации; если это так, я хочу добавить ошибку в состояние модели, а затем вернуть весь вид. Я попытался:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... но я не вижу ошибок в том месте Html.ValidationSummary
, где я предполагаю, что они появятся. У меня есть подозрение, что «Модель» - не тот ключ, но я не смог ничего найти в Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Скотт Бейкер
источник
источник
Ответы:
В конце концов я наткнулся на пример использования, которое искал - назначить ошибку для модели в целом, а не для одного из ее свойств, как вы обычно называете:
но используйте пустую строку для ключа:
Сообщение об ошибке будет отображаться так,
<%: Html.ValidationSummary() %>
как вы ожидаете.источник
ModelState.AddError(errorMessage)
илиModelState.AddGlobalError(errorMessage)
... было бы интуитивно понятно, и было бы проще узнать, как добавить сообщение об ошибке, не связанное со свойствами какой-либо модели.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
Перегрузка будет отображать все ошибки проверки , если ее аргумент является ложным или только неимущественные конкретным (ключ = «») ошибки , если ее аргумент верно.Вы можете добавить ошибку модели в любое свойство вашей модели, я предлагаю, если нет ничего связанного с созданием нового свойства.
В качестве примера мы проверяем, используется ли уже электронная почта в БД, и добавляем ошибку в свойство Email в действии, поэтому, когда я возвращаю представление, они знают, что есть ошибка, и как ее отобразить с помощью
и
источник
(m=>m.email).SomeMagicToString()
?nameof
Оператор приходит в C # 6.0 решает эту проблему магии проблема строки. msdn.microsoft.com/en-us/magazine/dn802602.aspxПоместить свойство точки модели в строки мне помогло:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
источник