2012-05-15 19 views
14

Estoy tratando de agregar una clase CSS para Html.LabelFor en una EditorTemplateExtender MVC3 afeitar Html.LabelFor añadir clase CSS

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

mi expectativa por ejemplo: etiqueta debe recoger la clase css.

Para esto traté de extender Label con el siguiente código, pero mi etiqueta no aparece. ¿Qué estoy haciendo mal aquí?

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

Si no estoy especificando clase css por ejemplo @Html.LabelFor(model => model.Name), entonces se muestra la etiqueta. Pero no puedo aplicar css a mi etiqueta. Quiero mostrar la etiqueta en color azul, cuando se carga la página. Luego, cambiar el estilo de etiqueta según la acción del usuario usando jquey. Todo está bien, en mi página, excepto el hecho de que no puedo extender y agregar un css clase a mi etiqueta.

+1

Defina "no funciona". ¿Cuál es el resultado que espera y cuál es el resultado que recibe? – Aaronaught

+0

¿Qué problema tienes? –

Respuesta

16

Sospecho que olvidó traer el espacio de nombre en el que definió esta clase LabelExtensions en el alcance de la vista. Así por ejemplo, si esta clase se define dentro del espacio de nombres MyProject.Extensions:

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

asegúrese de que usted ha traído este espacio de nombres en el ámbito de aplicación:

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

Estás usando html.LabelHelper

Sin embargo, ha definido su propio método LabelHelper, así que úselo =)

Cuestiones relacionadas