Вопрос по asp.net-mvc-3, c#-4.0 – Расширить MVC3 бритвой Html.LabelFor, чтобы добавить класс CSS

14

Я пытаюсь добавить класс CSS в Html.LabelFor на шаблон Editor.

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

например, мое ожидание: 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));
        }
    }

Если я не указываю класс CSS, например@Html.LabelFor(model => model.Name)   Затем он показывает метку. Но я не могу применить CSS к своему лейблу. Я хочу показать метку синим цветом, когда страница загружается., Затем изменить стиль метки на основе действий пользователя с помощью jquey. Все нормально, на моей странице, за исключением того факта, что я не могу расширить и добавить класс CSS на мой лейбл.

Пожалуйста, укажите "не работает". Какой результат вы ожидаете, и какой результат вы получаете? Aaronaught
Какие у вас проблемы? Jamie Dixon

Ваш Ответ

2   ответа
0

Однако вы определили свой собственный метод LabelHelper, так что используйте его =)

16

что вы забыли перенести пространство имен, в котором вы определили этот класс LabelExtensions, в область видимости. Так, например, если этот класс определен внутриMyProject.Extensions Пространство имен:

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

убедитесь, что вы внедрили это пространство имен в область видимости:

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

Похожие вопросы