我有一些Html.ValidationSummary的问题 . 我不想在ValidationSummary中显示属性错误 . 当我设置Html.ValidationSummary(true)时,它不会显示来自ModelState的错误消息 . 在字符串的控制器操作中有一些异常时
MembersManager.RegisterMember(member);
catch部分向ModelState添加错误:
ModelState.AddModelError("error", ex.Message);
但ValidationSummary不显示此错误消息 . 当我设置Html.ValidationSummary(false)时,所有消息都显示,但我不想显示属性错误 . 我该如何解决这个问题?
这是我正在使用的代码:
模型:
public class Member
{
[Required(ErrorMessage = "*")]
[DisplayName("Login:")]
public string Login { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Password:")]
public string Password { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Confirm Password:")]
public string ConfirmPassword { get; set; }
}
控制器:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (!ModelState.IsValid)
return View();
MembersManager.RegisterMember(member);
}
catch (Exception ex)
{
ModelState.AddModelError("error", ex.Message);
return View(member);
}
}
视图:
<% using (Html.BeginForm("Register", "Members", FormMethod.Post,
new { enctype = "multipart/form-data" })) {%>
<p>
<%= Html.LabelFor(model => model.Login)%>
<%= Html.TextBoxFor(model => model.Login)%>
<%= Html.ValidationMessageFor(model => model.Login)%>
</p>
<p>
<%= Html.LabelFor(model => model.Password)%>
<%= Html.PasswordFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</p>
<p>
<%= Html.LabelFor(model => model.ConfirmPassword)%>
<%= Html.PasswordFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</p>
<div>
<input type="submit" value="Create" />
</div>
<%= Html.ValidationSummary(true)%>
<% } %>
7 回答
我相信ValidationSummary标志的工作方式是它只显示
string.empty
的ModelErrors作为键 . 否则,假设它是属性错误 . 没有验证您提供的字符串是/不是模型上的属性 .这样做效果更好,因为您可以显示指定键的validationMessage:
并显示如下:
我知道这有点陈旧,已被标记为147票的答案,但还有其他一些需要考虑 .
如果需要,您可以在ValidationSummary中显示所有模型错误,名为property和String.Empty键的属性 . ValidationSummary中有一个重载会执行此操作 .
也许是这样的:
并在显示中添加:
要么
在我的情况下,由于返回,它无法正常工作 .
而不是使用:
我用了:
这是一个模型,因此很明显
ModelState.AddModelError("keyName","Message");
必须与模型一起使用 .这个答案说明了原因 . Adding validation with DataAnnotations
如果几乎所有事情看起来都是正确的,另外需要注意的是确保通过某些 CSS 覆盖显式隐藏验证摘要,如下所示:
这也可能导致
@Html.ValidationSummary
显示为隐藏,因为摘要是使用validation-summary-valid
类动态呈现的 .在视图的最下部添加它: