我在MVC中使用ValidationMessage控件.验证每个属性时,可能会显示多个错误消息,但ValidationMessage仅显示列表中的第一条错误消息.
这是一个例子:
ModelState["Key"] = new ModelState();
ModelState["Key"].Errors.Add("Error 1");
ModelState["Key"].Errors.Add("Error 2");
Run Code Online (Sandbox Code Playgroud)
在我有的HTML: <%= Html.ValidationMessage("Key")%>
显示: "Error 1"
我想在页面上看到所有错误消息 "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));
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加AllValidationMessageFor方法
编辑:在msgSpan上添加了一个空检查
使用开箱即用的 MVC,您必须添加一个 ValidationSummary:
<%= Html.ValidationSummary() %>
Run Code Online (Sandbox Code Playgroud)
这将显示所有模型错误。
| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |