В чем смысл ключевого параметра в ModelState.AddModelError в ASP.NET MVC? - PullRequest
44 голосов
/ 14 июля 2009

Я добавил проверки проверки в моем контроллере, которые изменяют ModelState, если проверка не удалась.

Например:

private bool ValidateMoney(string raw, string name, decimal min, decimal max) {
    try {
        var dec = Convert.ToDecimal(raw);

        if (dec < min) {
            throw new ArgumentOutOfRangeException(name + " must be >= " + min);
        }
        else if (dec > max) {
            throw new ArgumentOutOfRangeException(name + " must be <= " + max);
        }
    }
    catch (Exception ex) {
        ModelState.AddModelError(name, ex.GetUserMessage());
    }
    return ModelState.IsValid;
}

Однако, я никогда не знаю, какое значение передатьпараметр key в ModelState.AddModelError.(В этом примере я просто установил его на свое отображаемое имя пользовательского интерфейса.)

Для чего нужен параметр и как его использовать?

Ответы [ 4 ]

54 голосов
/ 14 июля 2009

Ключ используется помощником ValidationMessage HTML для точного отображения сообщения об ошибке.

Пример:

<%=Html.TextBox("Name") %> <br />
<%=Html.ValidationMessage("Name") %>

помощник ValidationMessage отобразит сообщение с ключом «Имя» в словаре ModelState.

12 голосов
/ 07 февраля 2015

Параметр key можно использовать, чтобы связать ошибку проверки с полем формы и, таким образом, контролировать, где сообщение появляется на экране. Он может использоваться как с входными данными типа HtmlHelper, так и с простыми входными данными HTML.

Если вы использовали @Html.TextBoxFor (или аналогичные) и @Html.ValidationMessageFor, вы можете получить значение ключа из HTML name проверяемого поля (используйте Inspect Element).

Если вы только что использовали HTML <input>, вы можете добавить заполнитель проверки с помощью @Html.ValidationMessage("AKeyIMadeUp") и получить сообщение, которое будет отображаться в нем следующим образом: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.

3 голосов
/ 02 августа 2017

На самом деле вы можете установить любое сообщение проверки, пока ваша форма не удалась Предположим, вы делаете поле в модели

[Required]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }

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

ModelState.AddModelError("OldPassword", "Current Password do not match ");

тогда ваше сообщение об ошибке будет связано с полем в модели с именем "OldPassword"

1 голос
/ 11 декабря 2018

Извините за некропост. В ответах, приведенных выше, не было этой детали, которая, по моему мнению, была полезна (это было то, что я искал !!)

Чтобы создать ошибки проверки 'Model Wide', просто добавьте string.Empty в качестве ключа.

, например

ModelState.AddModelError(string.Empty, "This is my Model Level Message");

Спасибо: http://www.tutorialsteacher.com/mvc/htmlhelper-validationsummary за чаевые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...