ModelState.AddModelError-как добавить ошибку, которая не относится к свойству?

Я проверяю свою базу в Create(FooViewModel fvm){...} чтобы увидеть, если fvm.prop1 и fvm.prop2 уже существуют в этой комбинации; если это так, я хочу добавить ошибку в modelstate, а затем вернуть все представление. Я попробовал:

public ActionResult Create(FooViewModel fvm){
    if (ThatComboAlreadyExists(fvm)) {
      ModelState.AddModelError("Model", "There is already one like that");
      return View(fvm);
    }
}

...но я не получаю отображения ошибок в Html.ValidationSummary, где я предполагаю, что они появятся. У меня есть подозрение, что "модель" не является правильным ключом, но я не смог найти ничего a la Google.

3 ответов


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

ModelState.AddModelError(string key, string errorMessage);

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

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

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


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

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

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

и

ModelState.AddModelError("Email", Resources.EmailInUse);

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