Ini adalah pertanyaan lama, tetapi jawaban yang ada mengabaikan masalah serius membuang atribut khusus apa pun saat Anda membuat ulang model. Saya menambahkan jawaban yang lebih rinci untuk mencakup opsi saat ini yang tersedia.
Anda memiliki 3 pilihan:
- Tambahkan
[DisplayName("Name goes here")]
atribut ke kelas model data. Sisi negatifnya adalah ini dibuang setiap kali Anda membuat ulang model data.
- Tambahkan parameter string ke Anda
Html.LabelFor
. Misalnya @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Referensi: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Kelemahannya adalah Anda harus mengulang label di setiap tampilan.
- Opsi ketiga. Gunakan kelas meta-data yang dilampirkan ke kelas data (ikuti detailnya).
Opsi 3 - Tambahkan Kelas Meta-Data:
Microsoft mengizinkan untuk mendekorasi properti pada kelas Entity Framework, tanpa mengubah kelas yang ada ! Ini dengan memiliki kelas meta-data yang dilampirkan ke kelas basis data Anda (secara efektif merupakan perpanjangan dari kelas EF Anda). Ini memungkinkan atribut ditambahkan ke kelas terkait dan bukan ke kelas itu sendiri sehingga perubahan tidak hilang saat Anda membuat ulang model data .
Misalnya, jika kelas data Anda MyModel
dengan SomekingStatus
properti, Anda dapat melakukannya seperti ini:
Pertama-tama deklarasikan kelas parsial dengan nama yang sama (dan menggunakan namespace yang sama), yang memungkinkan Anda menambahkan atribut kelas tanpa diganti:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Semua kelas model data yang dihasilkan adalah kelas parsial, yang memungkinkan Anda untuk menambahkan properti dan metode tambahan hanya dengan membuat lebih banyak kelas dengan nama yang sama (ini sangat berguna dan saya sering menggunakannya misalnya untuk menyediakan versi string yang diformat dari jenis bidang lain dalam model ).
Langkah 2: Tambahkan kelas metatadata yang direferensikan oleh kelas parsial baru Anda:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Referensi: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Catatan:
- Dari memori, jika Anda mulai menggunakan kelas metadata, itu mungkin mengabaikan atribut yang ada pada kelas sebenarnya (
[required]
dll) sehingga Anda mungkin perlu menduplikasi atribut yang ada di kelas Meta-data.
- Ini tidak beroperasi dengan sihir dan tidak akan bekerja dengan kelas apapun. Kode yang mencari atribut dekorasi UI dirancang untuk mencari kelas meta-data terlebih dahulu.