关于 asp.net mvc 3:MVC3 – 如何在末尾插入带有换行符 <br /> 的 ValidationMessageFor?

MVC3 - How to insert a ValidationMessageFor with a line break <br /> at the end?

我在一个表单中验证大约 10 个输入文件。 ValidationMessageFor-tags 应该在页面的顶部,所以我写的每一个都像:

1
2
@Html.ValidationMessageFor(model => model.Customer.ADDRESS.NAME)
@Html.ValidationMessageFor(model => model.Customer.ADDRESS.CITY)

等等。
我的模型如下所示:

1
2
3
4
[Required(ErrorMessage = Constants.ErrorMsgNameMissing)]
public string NAME { get; set; }
[Required(ErrorMessage = Constants.ErrorMsgCityMissing)]
public string CITY { get; set; }

常量是字符串。
现在,如果显示了多个 ValidationMessageFor,它们都在一行中。
如何在每条消息的末尾插入像 <br /> 这样的换行符?

这不是正确的方法:

1
2
@Html.ValidationMessageFor(model => model.Customer.ADDRESS.NAME)<br />
@Html.ValidationMessageFor(model => model.Customer.ADDRESS.CITY)<br />

因为即使没有错误也会显示 <br />...;)

提前致谢。

PS:将它们显示为列表也很棒。


我想你真正要找的是:

1
@Html.ValidationSummary()

我不确定是否有内置方法,但您可以轻松制作另一种扩展方法:

1
2
3
public static MvcHtmlString ValidationMessageLineFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) {
    return helper.ValidationMessageFor(expression) +"<br />";
}

类似的东西?


其实最上面应该是:

1
@Html.ValidationSummary(/*...*/)

字段验证应与各自的字段。

但是,如果你绝对坚持将 @Html.ValidationMessageFor(/*...*/) 放在顶部,那么在你的 CSS 中调整它们的布局行为并忘记 <br />\\'s


查看 Custom ValidationSummary 模板 Asp.net MVC 3。我认为,如果您可以完全控制验证的呈现方式,那将是最适合您的情况。您可以轻松地为 ValidationMessageFor.

编写扩展方法


如果可能的话,我会选择@Html.ValidationSummary()