c# - 使用 Font Awesome 图标渲染 ValidationMessageFor

标签 c# asp.net-mvc validation unobtrusive-validation

我正在尝试结合使用 Font Awesome 图标和标准 MVC 验证过程来实现表单验证。我已经编写了自定义 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?我这样做的方式正确吗?

最佳答案

这在某种程度上可以通过 CSS 来解决。例如,如果你想在你的验证消息前加上一个 fontawesome 图标,你可以包含以下 CSS:

.field-validation-error:before {
    font-family: FontAwesome;
    content: "\f06a\00a0";
}

所有验证消息都包含在具有 field-validation-error 类的 span 标记中。上面的 CSS 将在验证文本前附加一个感叹号图标和空格。

关于c# - 使用 Font Awesome 图标渲染 ValidationMessageFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36531115/

相关文章:

javascript - 验证密码至少为 6 个字符

c# - 简单的字符串替换出错了

c# - 免费的高级下拉列表控件 (Windows Forms .Net)

asp.net-mvc - Spark VS 2010 智能感知

javascript - .cshtml 文件中的 CSS 和 Javascript

java - Spring MVC i18n 验证错误消息

c# - 统计程序启动的次数

c# - x86 和 x64 之间的项目组织

c# - 带有文本输入字段的 MVC 对复选框

angular - 从数据模型创建 FormBuilder 组时如何添加验证器?