如何使Html.ValidationMessageFor在两个属性上工作?

时间:2010-03-25 18:10:32

标签: asp.net-mvc validation

目前我有一个定制属于这样的类的自定义属性:

[PropertiesMustMatch("Password", "PasswordConfirm", ErrorMessage = "Passwords must match!")]

问题是,只显示验证摘要,并且不突出显示不正确的文本框。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

模型级验证意味着默认的Mvc活页夹不知道您要验证的属性。

Asp.net Mvc没有内置支持在该验证器的视图上显示模型级错误和突出显示属性。

我可能会做这样的事情来实现视觉效果

<%var passwordCssClass = ViewData.ModelState["Key"] != null && ViewData.ModelState["Key"].Errors.Any() ? "model-error" : string.Empty; %>
<%= Html.PasswordFor(x => x.Password, new { @class = passwordCssClass })%>
<%= Html.PasswordFor(x => x.PasswordConfirm, new { @class = passwordCssClass })%>

您必须检查ModelState以获取ModelBinder用于模型级验证错误的键。将上面的“Key”替换为您找到的内容,然后将css类更改为您的错误css类可能。

这不是生产级代码,您需要调整Any()并确保它是您正在寻找的正确错误消息,甚至可能在控制器中移动逻辑并为CssClass提供视图应该通过你的模型使用。但它应该会让你前进。