2010-02-19 10 views

Respuesta

7

De acuerdo, mirando la fuente (System.Web.Mtc.Html.LabelExtensions.cs) para este método, no parece haber una manera de hacer esto con un HtmlHelper en ASP.NET MVC 2. I piensa que su mejor apuesta es crear su propia HtmlHelper o hacer lo siguiente para esta etiqueta específica:

<label for="Name" class="myLabel"><%= Model.Name %></label> 
+0

No funciona Referencia de objeto no establecida en una instancia de un objeto. Pero quizás sea otro error. Soy realmente nuevo en MVC. Entonces no hay forma de poner la clase css en Html.LabelFor, ¡bien, gracias Richard! – Aximili

+0

Haz lo que Richard sugirió, solo crea tu propia sobrecarga HtmlHelper de LabelFor(). Puede copiar la sintaxis del código fuente de LabelFor() si no está seguro de cómo crear la firma de la expresión. –

+2

Hola Nathan, ¿cómo creas una sobrecarga para LabelFor? ¿O de dónde puedo copiarlo? Puedes publicarlo como una nueva respuesta, gracias. – Aximili

65

sobrecarga de LabelFor:

public static class NewLabelExtensions 
{ 
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) 
    { 
     return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
     string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
     string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
     if (String.IsNullOrEmpty(labelText)) 
     { 
      return MvcHtmlString.Empty; 
     } 

     TagBuilder tag = new TagBuilder("label"); 
     tag.MergeAttributes(htmlAttributes); 
     tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
     tag.SetInnerText(labelText); 
     return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
    } 
} 

http://weblogs.asp.net/imranbaloch/archive/2010/07/03/asp-net-mvc-labelfor-helper-with-htmlattributes.aspx

+0

Como dice Nathan Taylor, y por aximili –

121

Lamentablemente, en 0.123.el método Html.LabelFor() no tiene firmas de método que permitan una declaración de clase directa. Sin embargo, MVC 4 agrega 2 sobrecargas que aceptan un objeto anónimo htmlAttributes.

Como con todos los HtmlHelpers, es importante recordar que el compilador de C# ve class como palabra reservada.

tanto, si utiliza la @ antes de la clase de atributo funciona alrededor del problema, es decir:

@Html.LabelFor(model => model.PhysicalPostcode, new { @class= "SmallInput" }) 

El símbolo @ hace que la "clase" de un literal que se pasa a través.

+14

¿Por qué no se sube más? ¡Funciona perfectamente! (En MVC4, al menos.) –

+5

Lo probé en MVC 3, parece que no me gusta ... ¡quizás MVC4 FTW! – series0ne

+0

Esto es exactamente lo que estoy buscando. Estoy usando MVC4 btw :) –

Cuestiones relacionadas