Html.LabelFor angegebener Text


83

Jeder hat eine Idee, wie man Text bei der Verwendung angibt Html.LabelFor(c=>c.MyField). Es ist MyFieldmöglicherweise kein geeigneter Name für die Anzeige auf dem Bildschirm. Möglicherweise möchten Sie stattdessen "The Super Fantastic Field", aber es scheint keine Überlastung zu geben.

Irgendwelche Ideen?

Antworten:


139

Sie verwenden System.ComponentModel.DataAnnotations.DisplayAttribute:

[Display(Name = "My Field")]
public string MyField { get; set; }

Durch Festlegen der ResourceTypeEigenschaft für Ihr Attribut können Sie eine Ressourcendatei verwenden.

(Verwenden Sie vor .NET 4 System.ComponentModel.DisplayNameAttributemit der Einschränkung, dass der Anzeigename eine Konstante für die Kompilierungszeit sein muss.)


9
Du bist der Gewinner. Das musst du aber haben using System.ComponentModel;.
Kezzer

Mein Codegenerator spuckt diese automatisch aus und fügt Leerzeichen zwischen Pascal-Großbuchstaben ein. Klappt wunderbar!
GalacticCowboy

Obwohl diese Lösung ganz gut aussieht, verstehe ich Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type. Diese Lösung scheint also schlecht für 18n zu sein.
Martin Thoma

@moose Ich habe die Antwort aktualisiert, um das neue in .NET-4 widerzuspiegeln, das System.ComponentModel.DataAnnotations.DisplayAttributedie Verwendung einer Ressourcendatei ermöglicht. Wenn Sie noch nicht auf 4 / 4.5 sind, kann das alte System.ComponentModel.DisplayNameAttributewie folgt
Curtis kauft

@CodeBlend Ich habe T4 verwendet, um die Modellklassen mit den entsprechenden Attributen zu generieren. Ich hatte eine Methode, die die Zeichenfolge in Großbuchstaben aufteilte und dann wieder mit einem Leerzeichen verband. (Es ist 3 Jahre her, also haben Sie den Code im Moment nicht vor mir ...)
GalacticCowboy

51

Einfache Lösung Fügen Sie einfach Folgendes in die Ansicht ein:

@Html.LabelFor(c=>c.MyField, "My Field")

26

In MVC 3 gibt es eine neue Überlastung, sodass Sie in der Lage sein sollten, einen benutzerdefinierten Test für das Etikett für den Helfer festzulegen.


8
@ Html.LabelFor (model => model.IdCode, "Friendly Name")
Dave Mateer

3

Ich habe v2 noch nicht heruntergeladen, kann es also nicht testen, aber ich glaube, es funktioniert wie DynamicData. In diesem Fall würden Sie so etwas auf Ihrem Modell tun:

[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}

Die Anzeige ist nicht verfügbar, und Intellisense kann sie auch in keiner Bibliothek finden.
Kezzer

Fügen Sie einen Verweis auf System.ComponentModel.DataAnnotations.dll hinzu und fügen Sie ihn mit System.ComponentModel.DataAnnotations hinzu.
Daniel

Fügen Sie stattdessen einen Verweis auf System.ComponentModel.DataAnnotations aus dem GAC hinzu (dh auf der Registerkarte .NET, um Verweise hinzuzufügen)
Daniel,

Ich verwende bereits DataAnnotations, daher ist die Referenz nicht das Problem.
Kezzer

3
Ah, sorry - das ist anscheinend Silverlight3 / .NET 4.0: msdn.microsoft.com/en-us/library/… Ich denke, DisplayName wird tun, was Sie wollen, wie itsmecurtis vorschlägt. Hier ist mehr dazu: davidhayden.com/blog/dave/archive/2009/08/19/…
Daniel

2

Es gibt zwei Möglichkeiten:
1 "direkte Annotationen"
2 "Annotatinos mit einer Ressource"
Direkte Annotationen

[Display(Name = "My Field")]
public string MyField { get; set; }

Annotatinos mit einer Ressource

[Display(Name = "My_Field",ResourceType = typeof(Resource))]
public string MyField { get; set; }

Für den zweiten Weg muss ein Wert in der Ressourcendatei hinzugefügt werden, der wahrscheinlich als Resource.resx bezeichnet wird .
Verwenden Sie, was Ihrem Zweck entspricht.


0

Ich habe CP1 noch nicht ausgecheckt, aber ich habe Scotts Veröffentlichung gelesen und ich erinnere mich, dass der Code von T4 generiert wurde. Ich nehme an, Sie könnten das immer modifizieren, aber ich würde vermuten, dass sie in CP2 Überlastungen verursachen.

Bearbeiten: Die Quelle ist immer verfügbar. Sie können also einfach die Methode ändern, den T4-Generator ändern und loslegen. Gib auch ein Ticket oder eine Anfrage (irgendwie) für diesen Mod ein, damit er in die nächste Version eingearbeitet wird.


Schade, ich mache eine Arbeitsvorschau, aber sie ist nicht wirklich realisierbar, da unsere Feldnamen im Vergleich zu ihren Beschreibungsgegenstücken ziemlich falsch sind.
Kezzer

0

Es gibt 5 Überladungen. Einige bieten den zweiten Parameter von "string labelText" an, den Sie auf "The Super Fantastic Field" setzen würden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.