【发布时间】:2016-04-10 14:38:33
【问题描述】:
我正在尝试结合标准 MVC 验证过程使用 Font Awesome 图标来实现表单验证。我编写了一个自定义的 ValidationMessageFor 助手来实现这一点:
public static MvcHtmlString FontAwesomeValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
var propertyName = ExpressionHelper.GetExpressionText(expression);
var name = helper.AttributeEncode(helper.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName));
var builder = new TagBuilder("span");
var modelName = ExpressionHelper.GetExpressionText(expression);
builder.MergeAttribute("data-valmsg-for", modelName);
builder.MergeAttribute("data-valmsg-replace", bool.TrueString.ToLowerInvariant());
if (helper.ViewData.ModelState[name] == null ||
helper.ViewData.ModelState[name].Errors == null ||
helper.ViewData.ModelState[name].Errors.Count == 0)
{
return !helper.ViewContext.UnobtrusiveJavaScriptEnabled
? MvcHtmlString.Empty
: MvcHtmlString.Create(builder.ToString());
}
builder.AddCssClass("text-danger");
builder.InnerHtml = "<i class='fa fa-exclamation'></i>";
builder.MergeAttribute("title", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
return MvcHtmlString.Create(builder.ToString());
}
这在我的形式中被称为:
@Html.FontAwesomeValidationMessageFor(m => m.Email)
并默认呈现此 HTML:
<span data-valmsg-for="Email" data-valmsg-replace="true"></span>
这似乎工作正常,并在我的表单上呈现适当的跨度。但是,一旦我启用客户端验证,我的助手就不再被调用,而是显示标准模型验证消息。如何获得客户端验证以呈现我的帮助 HTML?我这样做的方式是否正确?
【问题讨论】:
标签: c# asp.net-mvc validation unobtrusive-validation