ASP.NET MVCのDisplayName
属性とDisplay
属性の違いは何ですか?
ASP.NET MVCのDisplayName
属性とDisplay
属性の違いは何ですか?
回答:
どちらも同じ結果になりますが、重要な違いは、ResourceType
in DisplayName
属性を指定できないことです。MVC 2の例では、DisplayName
ローカリゼーションを介してリソースを提供するために属性をサブクラス化する必要がありました。Display
属性(MVC3および.NET4の新機能)はResourceType
、「すぐに使える」プロパティとしてオーバーロードをサポートします。
DisplayName
DisplayName
モデルのメタデータにを設定します。例えば:
[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.dll
Description
またはなどの追加プロパティを設定できますShortName
DisplayNameAttribute
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)