To było stare pytanie, ale istniejące odpowiedzi pomijają poważny problem wyrzucania atrybutów niestandardowych podczas regeneracji modelu. Dodaję bardziej szczegółową odpowiedź, aby uwzględnić aktualnie dostępne opcje.
Masz 3 opcje:
- Dodaj
[DisplayName("Name goes here")]
atrybut do klasy modelu danych. Wadą jest to, że jest to wyrzucane za każdym razem, gdy ponownie generujesz modele danych.
- Dodaj parametr ciągu do pliku
Html.LabelFor
. np. @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Odniesienie: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Wadą jest to, że musisz powtórzyć etykietę w każdym widoku.
- Trzecia opcja. Użyj klasy metadanych dołączonej do klasy danych (szczegóły poniżej).
Opcja 3 - Dodaj klasę metadanych:
Microsoft pozwala na dekorowanie właściwości w klasie Entity Framework, bez modyfikowania istniejącej klasy ! Dzieje się tak dzięki klasom metadanych, które są dołączane do klas bazy danych (w rzeczywistości boczne rozszerzenie klasy EF). Umożliwia to dodawanie atrybutów do skojarzonej klasy, a nie do samej klasy, dzięki czemu zmiany nie zostaną utracone podczas ponownego generowania modeli danych .
Na przykład, jeśli klasa danych MyModel
o SomekingStatus
nieruchomości, można zrobić to tak:
Najpierw zadeklaruj częściową klasę o tej samej nazwie (i używając tej samej przestrzeni nazw), co pozwala na dodanie atrybutu klasy bez przesłonięcia:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Wszystkie generowane klasy modelu danych są klasami częściowymi, które pozwalają na dodawanie dodatkowych właściwości i metod poprzez proste tworzenie większej liczby klas o tej samej nazwie (jest to bardzo przydatne i często używam go np. Do udostępnienia sformatowanych ciągowych wersji innych typów pól w modelu ).
Krok 2: Dodaj klasę metatadanych, do której odwołuje się Twoja nowa klasa częściowa:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Odniesienie: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Uwagi:
- Z pamięci, jeśli zaczniesz używać klasy metadanych, może ona zignorować istniejące atrybuty w aktualnej klasie (
[required]
itp.), Więc może być konieczne zduplikowanie tych z klasy metadanych.
- Nie działa to za pomocą magii i nie będzie działać tylko z żadnymi klasami. Kod, który szuka atrybutów dekoracji interfejsu użytkownika, został zaprojektowany w taki sposób, aby najpierw szukał klasy metadanych.