ASP.NET MVC中ModelState.AddModelError的关键参数是什么?

如果validation失败,我喜欢在我的控制器中编写validation函数来修改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; } 

但是 ,我永远不知道要为ModelState.AddModelError这个愚蠢的“键”参数放置什么。 (在这个例子中,我只是将它设置为我的UI显示名称。)

MVC开发人员在添加时想到了什么?

ValidationMessage HTML Helper使用Key来知道要显示的确切错误消息。

例:

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

ValidationMessage助手将在ModelState字典中显示具有“Name”键的消息。

key参数可用于将validation错误与表单字段相关联。

如果您使用@Html.TextBoxFor (或类似的)和@Html.ValidationMessageFor ,则可以从正在validation的字段的HTML name (使用检查元素)中获取该键的值。

如果您刚刚使用了HTML <input> ,则可以使用@Html.ValidationMessage("AKeyIMadeUp")添加一个validation占位符,并获取一条消息,如下所示: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");

其实你可以设置任何validation信息,而你的表单提交不成功,假设你在模型中创build一个字段

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

而当你的模型状态无效时,你可以设置错误消息绑定与该字段如。

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

那么你的错误信息将被绑定到名为“OldPassword”的模型中的字段