ASP.NET MVCのDisplayName属性とDisplay属性の違いは何ですか?
ASP.NET MVCのDisplayName属性とDisplay属性の違いは何ですか?
回答:
どちらも同じ結果になりますが、重要な違いは、ResourceTypein DisplayName属性を指定できないことです。MVC 2の例では、DisplayNameローカリゼーションを介してリソースを提供するために属性をサブクラス化する必要がありました。Display属性(MVC3および.NET4の新機能)はResourceType、「すぐに使える」プロパティとしてオーバーロードをサポートします。
DisplayNameDisplayNameモデルのメタデータにを設定します。例えば:
[DisplayName("foo")]
public string MyProperty { get; set; }
そしてあなたがあなたの見解で以下を使用するならば:
@Html.LabelFor(x => x.MyProperty)
それは生成されます:
<label for="MyProperty">foo</label>
Display 同じことを行いますが、名前、説明などの他のメタデータプロパティを設定することもできます
Brad Wilsonが、これらの属性をカバーする素晴らしいブログ投稿を公開しています。
現在の回答では、実際の重要な違いと重要な違い、および意図された使用法にとってそれが何を意味するかを強調するために無視されていると思います。実装者は両方のサポートを組み込んでいるため、特定の状況では両方とも機能する可能性がありますが、使用シナリオは異なります。どちらもプロパティとメソッドに注釈を付けることができますが、いくつか重要な違いがあります:
DisplayAttribute
System.ComponentModel.DataAnnotations名前空間で定義されていますSystem.ComponentModel.DataAnnotations.dllDescriptionまたはなどの追加プロパティを設定できますShortNameDisplayNameAttribute
System.ComponentModel名前空間にありますSystem.dllアセンブリと名前空間は、意図した使用法を示しており、ローカリゼーションのサポートは非常に重要です。DisplayNameAttributeは.NET 2以降に存在し、開発者のコンポーネントとレガシープロパティグリッドでのプロパティの命名を目的としたものであり、ローカリゼーションなどを必要とする可能性のあるエンドユーザーに表示されるものではありません。
DisplayAttributeは後で.NET 4で導入され、エンドユーザーに表示されるデータクラスのメンバーにラベルを付けるために特別に設計されたように思われるため、DTO、エンティティ、およびその他の種類のものに適しています。クラスで使用できないように制限されているのは残念です。
編集:最新の.NET CoreソースがDisplayAttributeクラスでも使用できるようになりました。
おそらくこれは.netコアに固有のものです。DisplayNameは機能しませんが、Display(Name = ...)は機能します。これにより、他の誰かが関係するトラブルシューティングを節約できます:)
//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)