Подтвердить что ты не робот

Какова точка ключевого параметра в ModelState.AddModelError в ASP.NET MVC?

Я добавил проверки моего контроллера, которые изменяют 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. (В примере я просто установил его на свое отображаемое имя пользовательского интерфейса.)

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

4b9b3361

Ответ 1

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

Пример:

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

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

Ответ 2

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

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

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

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

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

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

Ответ 4

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

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

например

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

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