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