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

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

Ответ 1

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

ModelState.AddModelError(string key, string errorMessage);

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

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

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

Ответ 2

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

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

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

и

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

Ответ 3

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