我在MVC中使用ValidationMessage控件.验证每个属性时,可能会显示多个错误消息,但ValidationMessage仅显示列表中的第一条错误消息.
这是一个例子:
ModelState["Key"] = new ModelState(); ModelState["Key"].Errors.Add("Error 1"); ModelState["Key"].Errors.Add("Error 2");
在我的HTML中:<%= Html.ValidationMessage(“Key”)%>
我想在页面上看到所有错误消息“Error 1 Error 2”
知道怎么做吗?
解决方法
我有完全相同的问题,所以我为HtmlHelper创建了一个扩展方法,作为MVC ValidationMessage方法的替代.
这比ValidationSummary方法的好处是它显示每个字段的错误消息,因此您可以将它放在每个字段旁边(与ValidationMessage方法相同).
public static string AllValidationMessage(this HtmlHelper helper,string modelName) { StringBuilder builder = new StringBuilder(); TagBuilder ulTag = new TagBuilder("ul"); ulTag.AddCssClass("u-error-list"); builder.Append(ulTag.ToString(TagRenderMode.StartTag)); if (helper.ViewData.ModelState.ContainsKey(modelName) && helper.ViewData.ModelState[modelName].Errors.Count > 0) { foreach (var err in helper.ViewData.ModelState[modelName].Errors) { TagBuilder liTag = new TagBuilder("li") { InnerHtml = HttpUtility.HtmlEncode(err.ErrorMessage) }; liTag.AddCssClass("u-error-item"); builder.Append(liTag.ToString()); } } builder.Append(ulTag.ToString(TagRenderMode.EndTag)); var msgSpan = helper.ValidationMessage(modelName,"{placeholder}"); if (msgSpan == null) return string.Empty; return msgSpan.ToHtmlString().Replace("{placeholder}",builder.ToString()); } public static string AllValidationMessageFor<TModel,TProperty>(this HtmlHelper<TModel> helper,Expression<Func<TModel,TProperty>> expression) { return HtmlHelperExtensions.AllValidationMessage(helper,ExpressionHelper.GetExpressionText(expression)); }