Apa perbedaan antara DisplayNameatribut dan Displayatribut dalam ASP.NET MVC?
Apa perbedaan antara DisplayNameatribut dan Displayatribut dalam ASP.NET MVC?
Jawaban:
Keduanya memberi Anda hasil yang sama tetapi perbedaan utama yang saya lihat adalah bahwa Anda tidak dapat menentukan atribut ResourceTypedalam DisplayName. Sebagai contoh di MVC 2, Anda harus subklas DisplayNameatribut untuk menyediakan sumber daya melalui lokalisasi. Displayatribut (baru dalam MVC3 dan .NET4) mendukung ResourceTypekelebihan beban sebagai properti "out of the box".
DisplayNamemengatur DisplayNamemetadata model. Sebagai contoh:
[DisplayName("foo")]
public string MyProperty { get; set; }
dan jika Anda menggunakan dalam pandangan Anda hal berikut:
@Html.LabelFor(x => x.MyProperty)
itu akan menghasilkan:
<label for="MyProperty">foo</label>
Display melakukan hal yang sama, tetapi juga memungkinkan Anda untuk mengatur properti metadata lainnya seperti Nama, Deskripsi, ...
Brad Wilson memiliki posting blog yang bagus yang mencakup atribut-atribut itu.
Saya pikir jawaban saat ini mengabaikan menyoroti perbedaan penting dan signifikan yang sebenarnya dan apa artinya untuk penggunaan yang dimaksud. Meskipun keduanya mungkin bekerja dalam situasi tertentu karena implementer mendukung keduanya, mereka memiliki skenario penggunaan yang berbeda. Keduanya dapat membuat anotasi properti dan metode tetapi berikut adalah beberapa perbedaan penting:
DisplayAttribute
System.ComponentModel.DataAnnotationsnamespace di System.ComponentModel.DataAnnotations.dllmajelisDescriptionatauShortNameDisplayNameAttribute
System.ComponentModelnamespace diSystem.dllMajelis dan namespace berbicara tentang penggunaan yang dimaksudkan dan dukungan pelokalan adalah penendang besar. DisplayNameAttributetelah ada sejak .NET 2 dan tampaknya telah lebih ditujukan untuk penamaan komponen pengembang dan properti dalam kisi properti warisan, tidak begitu banyak untuk hal-hal yang terlihat oleh pengguna akhir yang mungkin memerlukan lokalisasi dan semacamnya.
DisplayAttributediperkenalkan kemudian di .NET 4 dan tampaknya dirancang khusus untuk memberi label anggota kelas data yang akan terlihat oleh pengguna akhir, sehingga lebih cocok untuk DTO, entitas, dan hal-hal lain semacam itu. Saya merasa agak disayangkan bahwa mereka membatasinya sehingga tidak dapat digunakan di kelas.
EDIT: Sepertinya sumber .NET Core terbaru memungkinkan DisplayAttributeuntuk digunakan di kelas sekarang juga.
Mungkin ini khusus untuk .net core, saya menemukan DisplayName tidak akan berfungsi tetapi Display (Name = ...) tidak. Ini dapat menyelamatkan orang lain dari pemecahan masalah yang terlibat :)
//using statements
using System;
using System.ComponentModel.DataAnnotations; //needed for Display annotation
using System.ComponentModel; //needed for DisplayName annotation
public class Whatever
{
//Property
[Display(Name ="Release Date")]
public DateTime ReleaseDate { get; set; }
}
//cshtml file
@Html.DisplayNameFor(model => model.ReleaseDate)