我对 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)%> <% } %>
我相信 ValidationSummary 标志的工作方式是它只会显示 ModelErrorsstring.empty作为键。否则假定它是一个属性错误。您添加的自定义错误具有键“错误”,因此当您调用 ValidationSummary(true) 时它不会显示。您需要使用空键添加自定义错误消息,如下所示:
string.empty
ModelState.AddModelError(string.Empty, ex.Message);