MVC3 - 如何在最后插入带有换行符的ValidationMessageFor?

时间:2011-12-23 18:37:53

标签: asp.net-mvc-3 razor

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

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

等等。 我的模型看起来像这样:

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

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

这不是正确的方法:

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

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

提前致谢。

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

5 个答案:

答案 0 :(得分:3)

我认为你真正想要的是:

@Html.ValidationSummary()

答案 1 :(得分:1)

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

答案 2 :(得分:1)

结帐Custom ValidationSummary template Asp.net MVC 3。如果您完全控制验证的呈现方式,我认为最适合您的情况。您可以轻松地为ValidationMessageFor编写扩展方法。

答案 3 :(得分:1)

实际上,顶部应该是:

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

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

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

答案 4 :(得分:1)

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

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

那样的东西?