Расширьте MVC3 бритву Html.LabelДля добавления класса css
Я пытаюсь добавить класс css в Html.LabelFor на EditorTemplate
@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 на мой ярлык.
Ответы
Ответ 1
Я подозреваю, что вы забыли привести пространство имен, в котором вы определили этот класс LabelExtensions в области видимости. Например, если этот класс определен внутри пространства имен MyProject.Extensions
:
namespace MyProject.Extensions
{
public static class LabelExtensions
{
...
}
}
убедитесь, что вы ввели это пространство имен в область видимости:
@using MyProject.Extensions
@model MyViewModel
...
@Html.LabelFor(model => model.Name, new { @class = "myLabel" })
Ответ 2
Вы используете html.LabelHelper
Однако вы определили свой собственный метод LabelHelper, поэтому используйте его =)