표시 이름 속성 대 표시 속성


답변:


69

둘 다 동일한 결과를 제공하지만 주요 차이점은 ResourceTypein DisplayName속성을 지정할 수 없다는 것입니다. MVC 2의 예에서는 DisplayName지역화를 통해 리소스를 제공하기 위해 특성을 서브 클래 싱해야했습니다 . Display속성 (MVC3 및 .NET4의 새로운 기능)은 ResourceType"기본 제공"속성으로 오버로드를 지원 합니다.


1
알아 둘만 한! .resx 파일에서 표시 값을로드하기 위해 사용자 정의 속성을 구현하려고했지만이 질문에서 발생했습니다. 표시 속성은 지역화 된 응용 프로그램을 개발할 때 사용하는 방법입니다.
Carl Heinrich Hancke

148

DisplayNameDisplayName모델 메타 데이터에서를 설정합니다 . 예를 들면 다음과 같습니다.

[DisplayName("foo")]
public string MyProperty { get; set; }

그리고 당신이 당신의 관점에서 사용하는 경우 다음을 수행하십시오.

@Html.LabelFor(x => x.MyProperty)

다음을 생성합니다.

<label for="MyProperty">foo</label>

Display 이름은 같지만 이름, 설명 등의 다른 메타 데이터 속성을 설정할 수도 있습니다.

브래드 윌슨 (Brad Wilson)은 이러한 속성을 다루는 멋진 블로그 게시물 을 가지고 있습니다.


1
+1-아마도 내 것보다 훨씬 더 도움이 될 것입니다. 나를 위해 아침에 너무 일찍 :)
Andras Zoltan

@ Descriptor.DisplayName을 호출 할 때 PropertyDescriptor 및 Display (name ..)를 사용하는 데 문제가있었습니다. Display (name ..)가 아닌 DisplayName 만 사용합니다.
eaglei22

24

현재의 대답은 실제 중요하고 중요한 차이점과 의도 된 사용법에 대한 의미를 강조하기 위해 무시하고 있다고 생각합니다. 구현자가 두 가지를 모두 지원하기 때문에 특정 상황에서 둘 다 작동 할 수 있지만 사용 시나리오가 다릅니다. 둘 다 속성과 메서드에 주석을 달 수 있지만 몇 가지 중요한 차이점이 있습니다.

DisplayAttribute

  • 어셈블리 의 System.ComponentModel.DataAnnotations네임 스페이스에 정의System.ComponentModel.DataAnnotations.dll
  • 매개 변수 및 필드에 사용할 수 있습니다
  • Description또는 같은 추가 속성을 설정할 수 있습니다ShortName
  • 자원으로 현지화 가능

DisplayNameAttribute

  • DisplayName은 System.ComponentModel네임 스페이스에 있습니다.System.dll
  • 수업과 행사에 사용 가능
  • 자원으로 현지화 할 수 없음

어셈블리 및 네임 스페이스는 의도 된 사용법을 나타내며 현지화 지원이 가장 중요합니다. DisplayNameAttribute.NET 2 이후로 개발되었으며 레거시 속성 표에서 개발자 구성 요소 및 속성의 이름을 지정하기위한 것으로 보이며 현지화 등을 필요로하는 최종 사용자가 볼 수있는 것은 아닙니다.

DisplayAttribute.NET 4에서 나중에 소개되었으며 최종 사용자가 볼 수있는 데이터 클래스의 멤버를 레이블링하기 위해 특별히 설계된 것으로 보이므로 DTO, 엔터티 및 기타 종류의 항목에 더 적합합니다. 나는 그들이 불행히도 그것을 제한하여 수업에서 사용할 수는 없다는 것을 알게되었습니다.

편집 : 최신 .NET Core 소스 DisplayAttribute를 사용하여 클래스에서도 사용할 수있는 것처럼 보입니다 .


13

아마도 이것은 .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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.