扩展MVC3剃刀Html.LabelFor添加CSS类(Extend MVC3 razor Html

2019-07-29 09:44发布

我想一个CSS类添加到Html.LabelFor上EditorTemplate

 @Html.LabelFor(model => model.Name, new { @class = "myLabel" })

我的例如期望:标签应该拿起的CSS类。

为此,我试着用下面的代码扩展标签,但我的标签没有显示出来。 我在做什么错在这里?

 public static class LabelExtensions
    {
        public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
        {
            return html.LabelFor(expression, null, htmlAttributes);
        }

        public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes)
        {
            return html.LabelHelper(
                ModelMetadata.FromLambdaExpression(expression, html.ViewData),
                ExpressionHelper.GetExpressionText(expression),
                HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes),
                labelText);
        }

        private static MvcHtmlString LabelHelper(this HtmlHelper html, ModelMetadata metadata, string htmlFieldName, IDictionary<string, object> htmlAttributes, string labelText = null)
        {
            var str = labelText
                ?? (metadata.DisplayName
                ?? (metadata.PropertyName
                ?? htmlFieldName.Split(new[] { '.' }).Last()));

            if (string.IsNullOrEmpty(str))
                return MvcHtmlString.Empty;

            var tagBuilder = new TagBuilder("label");
            tagBuilder.MergeAttributes(htmlAttributes);
            tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
            tagBuilder.SetInnerText(str);

            return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
        }

        private static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
        {
            return new MvcHtmlString(tagBuilder.ToString(renderMode));
        }
    }

如果我不指定例如CSS类@Html.LabelFor(model => model.Name)然后将其显示了标签。 但我不能够运用CSS来我的标签。 我想,以显示蓝色的标签,当页面加载,然后根据用户的使用行为是jquey.All精细改变标签的风格,我的网页上,除了一个事实,我无法扩展,并添加CSS类我的标签。

Answer 1:

我怀疑你忘记带您在其中范围在视图中定义该LabelExtensions类的命名空间。 因此,举例来说,如果这个类里面定义MyProject.Extensions命名空间:

namespace MyProject.Extensions
{
    public static class LabelExtensions
    {
        ...
    }
}

请确保你已经把这个命名空间到范围:

@using MyProject.Extensions
@model MyViewModel
...
@Html.LabelFor(model => model.Name, new { @class = "myLabel" })


Answer 2:

您正在使用html.LabelHelper

然而,你自己定义LabelHelper方法,所以用它=)



文章来源: Extend MVC3 razor Html.LabelFor to add css class