Html.LabelFor Specified Text


83

Każdy ma pomysł, jak określić tekst podczas używania Html.LabelFor(c=>c.MyField). To poprostuMyField może nie być odpowiednia nazwa do wyświetlenia na ekranie, możesz zamiast tego chcieć „The Super Fantastic Field”, ale nie ma żadnych przeciążeń.

Jakieś pomysły?

Odpowiedzi:


139

Używasz System.ComponentModel.DataAnnotations.DisplayAttribute:

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

Ustawienie ResourceTypewłaściwości atrybutu umożliwi użycie pliku zasobów.

(Przed .NET 4 używaj System.ComponentModel.DisplayNameAttributez zastrzeżeniem, że nazwa wyświetlana musi być stałą czasu kompilacji).


9
Jesteś zwycięzcą. Musisz jednak mieć using System.ComponentModel;.
Kezzer

Mój generator kodu wypluwa je automatycznie, wstawiając spacje między słowami z dużymi literami w języku Pascal. Działa jak marzenie!
GalacticCowboy

Chociaż to rozwiązanie wygląda całkiem nieźle, dostaję Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type. Więc to rozwiązanie wydaje się być złe dla l18n.
Martin Thoma

@moose Zaktualizowałem odpowiedź, aby odzwierciedlała nowość w .NET-4, System.ComponentModel.DataAnnotations.DisplayAttributektóra pozwala na użycie pliku zasobów. Jeśli nie masz jeszcze 4 / 4,5, stary System.ComponentModel.DisplayNameAttributemoże zostać przedłużony w następujący sposób: stackoverflow.com/a/2432520/33533
Curtis kupuje

@CodeBlend Używałem T4 do generowania klas modelu z odpowiednimi atrybutami. Miałem metodę, która dzieliła ciąg na duże litery, a następnie łączyła ją ponownie spacją. (Minęły 3 lata, więc nie mam w tej chwili kodu przede mną ...)
GalacticCowboy


26

W MVC 3 pojawiło się nowe przeciążenie, więc powinieneś być w stanie określić niestandardowy test dla pomocnika labelfor.


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

3

Nie pobrałem jeszcze wersji 2, więc nie mogę przetestować, ale uważam, że działa jak DynamicData, w takim przypadku zrobiłbyś coś takiego na swoim modelu:

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

Display nie jest dostępny, a IntelliSense nie może go znaleźć w żadnej bibliotece.
Kezzer

Dodaj odwołanie do System.ComponentModel.DataAnnotations.dll i dodaj przy użyciu System.ComponentModel.DataAnnotations.
Daniel

Zamiast tego dodaj odniesienie do System.ComponentModel.DataAnnotations z GAC (tj. W zakładce .NET dodawania odniesień)
Daniel

Używam już DataAnnotations, więc odwołanie nie jest problemem.
Kezzer

3
Ach, przepraszam - to najwyraźniej Silverlight3 / .NET 4.0: msdn.microsoft.com/en-us/library/… Myślę, że DisplayName zrobi to, co chcesz, jak sugeruje itsmecurtis. Tutaj jest więcej na ten temat: davidhayden.com/blog/dave/archive/2009/08/19/…
Daniel

2

Istnieją dwa sposoby:
1 "bezpośrednie adnotacje"
2 "adnotacje z zasobem"
bezpośrednie adnotacje

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

Annotatinos z zasobem

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

Drugi sposób będzie wymagał dodania wartości w pliku zasobów, prawdopodobnie o nazwie Resource.resx .
Użyj, który pasuje do Twojego celu.


0

Nie sprawdzałem jeszcze CP1, ale przeczytałem wydanie Scotta i wydaje mi się, że pamiętam, że kod został wygenerowany przez T4. Przypuszczam, że zawsze możesz to zmodyfikować, ale podejrzewam, że zapewnią przeciążenia w CP2.

Edycja: źródło jest zawsze dostępne, więc możesz po prostu zmodyfikować metodę, zmienić generator T4 i będziesz gotowy. Wstaw również bilet lub prośbę (w jakiś sposób) dla tego moda, aby mógł zostać wykorzystany w następnej wersji.


Szkoda, robię podgląd pracy, ale nie jest to naprawdę wykonalne, ponieważ nasze nazwy pól są dość fałszywe w porównaniu z ich odpowiednikami w opisach.
Kezzer

0

Występuje 5 przeciążeń. Kilka oferuje drugi parametr „string labelText”, który można ustawić na „The Super Fantastic Field”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.