2010-01-15 19 views

Respuesta

20

He creado este ayudantes HTML para mi proyecto:

public static class MyLabelExtensions 
{ 
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText) 
    { 
     return Label(htmlHelper, forName, labelText, (object) null); 
    } 

    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText, 
             object htmlAttributes) 
    { 
     return Label(htmlHelper, forName, labelText, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText, 
             IDictionary<string, object> htmlAttributes) 
    { 
     var tagBuilder = new TagBuilder("label"); 
     tagBuilder.MergeAttributes(htmlAttributes); 
     tagBuilder.MergeAttribute("for", forName.Replace(".", tagBuilder.IdAttributeDotReplacement), true); 
     tagBuilder.SetInnerText(labelText); 
     return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)); 
    } 

    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText) 
    { 
     return LabelFor(htmlHelper, expression, labelText, (object) null); 
    } 
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText, object htmlAttributes) 
    { 
     return LabelFor(htmlHelper, expression, labelText, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText, 
                  IDictionary<string, object> htmlAttributes) 
    { 
     string inputName = ExpressionHelper.GetExpressionText(expression); 
     return htmlHelper.Label(inputName, labelText, htmlAttributes); 
    } 
} 

los uso con "inflexible" recursos:

<%= Html.LabelFor(m=>m.NickName, UserStrings.NickName) %> 

Esperamos que ayuda ...

+1

Acabo de encontrar este código y lo implementé en mi proyecto. Sin embargo, recibí un extraño mensaje de "accesibilidad inconsistente" para HtmlHelper al construir. Resolví esto reemplazando cada instancia de "este HtmlHelper" a "este System.Web.Mvc.HtmlHelper". Espero que ayude a cualquier otra persona que encuentre esto. –

1

¿Por qué no creas tu propio Html Helper?

public static class MVCHelpers 
{ 
    public static string CustomLabelFor(this HtmlHelper helper, string ...) 

    { 
     return "<label ... </label>" 
    } 
} 
+0

Ese iba a ser mi último recurso, era asegurarme de que no me faltaba algo. Parece extraño que la única forma en que he encontrado personalizar el texto es usar DisplayNameAttribute. –

1

He encontrado esto extremadamente útil. Creo que esto es algo que falta en MVC 2. O al menos no he encontrado una manera de hacerlo integrado.

El caso más simple detalla la necesidad de esta función. Tengo dos objetos Contactos y Direcciones. Un contacto puede tener múltiples addesses

Dirección

  • ID
  • Calle
  • Ciudad
  • Estado

Contacto

  • ID
  • , dirección de bus Identificación
  • ID Domicilio

Ahora para una forma que edita o muestra un contacto, pudiendo cambiar el DisplayNameAttribute en la dirección de la propiedad 'calle' no es muy útil, ya que realmente quiero un campo para ser 'Business Street' y otro para ser 'Home Street'.

+0

Estoy de acuerdo. Creo que debería haber una manera de sobrescribir. –

+1

-1: No es una respuesta – xr280xr

14

Hay una nueva sobrecarga LabelFor en MVC3 RC que le permite especificar la etiqueta Texto.

+1

Sí, lo vi, ¡me alegro de que hayan agregado esto! –