ModelState.AddModelError - Как я могу добавить ошибку, которая не для свойства? - PullRequest
178 голосов
/ 21 апреля 2011

Я проверяю свою базу данных в 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.

Ответы [ 3 ]

301 голосов
/ 21 апреля 2011

В конце концов я наткнулся на пример использования, которое я искал - назначить ошибку для модели в целом, а не для одного из ее свойств, как обычно вы вызываете:

ModelState.AddModelError(string key, string errorMessage);

но используйте пустую строку для ключа:

ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");

Сообщение об ошибке будет отображаться в <%: Html.ValidationSummary() %>, как и следовало ожидать.

26 голосов
/ 21 апреля 2011

Вы можете добавить ошибку модели в любое свойство вашей модели, я предлагаю, если нет ничего связанного с созданием нового свойства.

В качестве примера мы проверяем, используется ли электронная почта уже в БД, и добавляем ошибку в свойство Email в действии, поэтому, когда я возвращаю представление, они знают, что есть ошибка, и как показать ее с помощью

<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>

и

ModelState.AddModelError("Email", Resources.EmailInUse);
1 голос
/ 21 ноября 2014

Размещение свойства точки модели в строках сработало для меня: ModelState.AddModelError("Item1.Month", "This is not a valid date");

...