Apa perbedaan antara DisplayName
atribut dan Display
atribut dalam ASP.NET MVC?
Apa perbedaan antara DisplayName
atribut dan Display
atribut dalam ASP.NET MVC?
Jawaban:
Keduanya memberi Anda hasil yang sama tetapi perbedaan utama yang saya lihat adalah bahwa Anda tidak dapat menentukan atribut ResourceType
dalam DisplayName
. Sebagai contoh di MVC 2, Anda harus subklas DisplayName
atribut untuk menyediakan sumber daya melalui lokalisasi. Display
atribut (baru dalam MVC3 dan .NET4) mendukung ResourceType
kelebihan beban sebagai properti "out of the box".
DisplayName
mengatur DisplayName
metadata 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.DataAnnotations
namespace di System.ComponentModel.DataAnnotations.dll
majelisDescription
atauShortName
DisplayNameAttribute
System.ComponentModel
namespace diSystem.dll
Majelis dan namespace berbicara tentang penggunaan yang dimaksudkan dan dukungan pelokalan adalah penendang besar. DisplayNameAttribute
telah 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.
DisplayAttribute
diperkenalkan 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 DisplayAttribute
untuk 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)