2010-02-19 1 views

Antwort

7

Okay, wenn Sie die Quelle (System.Web.Mvc.Html.LabelExtensions.cs) für diese Methode betrachten, scheint es keine Möglichkeit zu geben, dies mit einem HtmlHelper in ASP.NET MVC 2 zu tun denken Sie am besten Ihre eigene Htmlhelper oder gehen Sie wie folgt für dieses spezielle Etikett ist entweder zu erstellen:

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

Es funktioniert nicht Objektreferenz nicht auf eine Instanz eines Objekts festgelegt. Aber vielleicht ist das ein weiterer Fehler. Ich bin nur ganz neu bei MVC. Also gibt es keine Möglichkeit, CSS-Klasse in Html.LabelFor, in Ordnung, danke Richard! – Aximili

+0

Tun Sie, was Richard vorgeschlagen hat, erstellen Sie einfach Ihre eigene HtmlHelper-Überladung von LabelFor(). Sie können die Syntax des LabelFor() - Quellcodes kopieren, wenn Sie nicht sicher sind, wie Sie die Ausdruckssignatur erstellen. –

+2

Hi Nathan, wie erstellt man eine Überladung für LabelFor? Oder wo kann ich es kopieren? Du kannst es als neue Antwort posten, danke. – Aximili

65

Überlastung von 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

Wie ein Nathan Taylor sagt, und für Aximili –

121

Leider in 0.123.Die Html.LabelFor() -Methode hat keine Methodensignaturen, die eine direkte Klassendeklaration zulassen. MVC 4 fügt jedoch 2 Überladungen hinzu, die ein anonymes htmlAttributes-Objekt akzeptieren.

Wie bei allen HtmlHelpern ist es wichtig zu bedenken, dass der C# -Compiler class als reserviertes Wort sieht.

Also, wenn Sie das @ vor der Klasse verwenden, schreiben sie, um das Problem arbeitet, das heißt:

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

Das @ -Symbol macht die „Klasse“ eine wörtliche, dass durch übergeben wird.

+14

Warum ist das nicht upvoted mehr? Es funktioniert perfekt! (In MVC4, zumindest.) –

+5

Ich versuchte in MVC 3, es scheint nicht zu mögen ... vielleicht MVC4 FTW! – series0ne

+0

Das ist genau das, wonach ich suche. Ich benutze MVC4 btw :) –