ASP.NET MVC中ModelState.AddModelError中的关键参数有什么意义?

Fra*_*ger 46 .net c# 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,我永远不知道传递key参数的值ModelState.AddModelError.(在示例中,我只是将其设置为我的UI显示名称.)

参数是什么以及我应该如何使用它?

小智 55

ValidationMessage HTML Helper使用密钥来了解要显示的确切错误消息.

例:

<%=Html.TextBox("Name") %> <br />
<%=Html.ValidationMessage("Name") %>
Run Code Online (Sandbox Code Playgroud)

ValidationMessage帮助程序将显示ModelState字典中具有键"Name"的消息.

  • 验证用于所有类型的应用程序,而不仅仅是博客. (6认同)
  • 键可以是空字符串,但不能为空.如果键是空字符串,则可以使用Html.ValidationSummary(false)html帮助程序查看 (5认同)
  • @Frank恭敬,是不是很酷的功能?错误显示在您想要的字段旁边!我在谷歌把我带到这个问题后才知道这一点. (2认同)

Out*_*ill 12

key参数可用于将验证错误与表单字段相关联,从而控制消息在屏幕上的显示位置.它既可以与HtmlHelper类型的输入一起使用,也可以与简单的HTML输入一起使用.

如果您使用过@Html.TextBoxFor(或类似)和a @Html.ValidationMessageFor,则可以从name要验证的字段的HTML 中获取密钥的值(使用Inspect Element).

如果您刚刚使用了HTML <input>,则可以使用添加验证占位符@Html.ValidationMessage("AKeyIMadeUp"),并在其中显示如下所示的消息:ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.


小智 6

抱歉 Necropost。上面的答案没有我认为有用的细节(这正是我要找的!!)

为了创建“模型范围”验证错误 - 然后您只需添加 string.Empty 作为您的密钥。

例如

ModelState.AddModelError(string.Empty, "This is my Model Level Message");
Run Code Online (Sandbox Code Playgroud)

感谢:http : //www.tutorialsteacher.com/mvc/htmlhelper-validationsummary的提示。