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, где я предполагаю, что они появятся. У меня есть подозрение, что "модель" не является правильным ключом, но я не смог найти ничего а-ля Google.

3 161

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");