답변:
둘 다 동일한 결과를 제공하지만 주요 차이점은 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)