14

EditorTemplate の Html.LabelFor に css クラスを追加しようとしています。

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

instance:label に対する私の期待は、css クラスを取得する必要があります。

このために、次のコードで Label を拡張しようとしましたが、ラベルが表示されません。ここで何が間違っていますか?

 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));
        }
    }

たとえば @Html.LabelFor(model => model.Name) 、css クラスを指定していない場合は、ラベルが表示されます。しかし、ラベルに css を適用できません。ページの読み込み時にラベルを青色で表示したい。次に、jquey を使用してユーザー アクションに基づいてラベル スタイルを変更します。css クラスを拡張および追加できないという事実を除いて、私のページではすべて問題ありません。私のレーベルへ。

4

2 に答える 2

16

この LabelExtensions クラスを定義した名前空間をビューのスコープに入れるのを忘れたのではないかと思います。たとえば、このクラスがMyProject.Extensions名前空間内で定義されている場合:

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

この名前空間をスコープに含めたことを確認してください。

@using MyProject.Extensions
@model MyViewModel
...
@Html.LabelFor(model => model.Name, new { @class = "myLabel" })
于 2012-05-15T14:36:58.373 に答える
0

html.LabelHelper を使用しています

ただし、独自の LabelHelper メソッドを定義しているので、それを使用してください =)

于 2016-04-29T12:30:54.970 に答える