par*_*eer 21 asp.net-mvc asp.net-mvc-3
是否可以自定义Html.ValidationMessageFor方法,以便生成不同的HTML?
我想做类似的事情:
<div class="field-error-box">
<div class="top"></div>
<div class="mid"><p>This field is required.</p></div>
</div>
Run Code Online (Sandbox Code Playgroud)
arc*_*hil 28
我不确定是否可以使用paragraph而不是默认值span,因为它可能使验证插件无法发出错误消息.但对于div -s来说,这很容易 - 你可以编写自定义的html助手.
沿着这些方向的东西(可能需要进一步测试/编码).您需要在视图中包含此静态扩展方法的命名空间,或System.Web.Mvc.Html直接将其放入.
public static class Validator
{
public static MvcHtmlString MyValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
TagBuilder containerDivBuilder = new TagBuilder("div");
containerDivBuilder.AddCssClass("field-error-box");
TagBuilder topDivBuilder = new TagBuilder("div");
topDivBuilder.AddCssClass("top");
TagBuilder midDivBuilder = new TagBuilder("div");
midDivBuilder.AddCssClass("mid");
midDivBuilder.InnerHtml = helper.ValidationMessageFor(expression).ToString();
containerDivBuilder.InnerHtml += topDivBuilder.ToString(TagRenderMode.Normal);
containerDivBuilder.InnerHtml += midDivBuilder.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(containerDivBuilder.ToString(TagRenderMode.Normal));
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这使用默认ValidationMessageFor方法,不会干扰验证 - 插件错误消息处理.
您可以简单地使用它作为默认验证消息帮助程序
@Html.MyValidationMessageFor(model => model.SomeRequiredField)
Run Code Online (Sandbox Code Playgroud)
小智 7
我用另一种方式:
public static MvcHtmlString DivValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return MvcHtmlString.Create(htmlHelper.ValidationMessageFor(expression).ToString().Replace("span", "div"));
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以使用内置方式,但用div替换span.
如果您需要该函数的任何其他重载,只需根据需要复制.