지정된 텍스트 용 Html.Label


83

누구나 사용할 때 텍스트를 지정하는 방법에 대한 아이디어를 얻었습니다 Html.LabelFor(c=>c.MyField). 그것은 단지 MyField, 대신 "슈퍼 환상적인 필드"를 할 수 있습니다 화면에 표시하기에 적절한 이름되지 않을 수도 있지만 과부하가있을 나타나지 않습니다.

어떤 아이디어?

답변:


139

다음을 사용합니다 System.ComponentModel.DataAnnotations.DisplayAttribute.

[Display(Name = "My Field")]
public string MyField { get; set; }

ResourceType속성에 속성을 설정하면 리소스 파일을 사용할 수 있습니다.

(.NET 4 사용 이전 System.ComponentModel.DisplayNameAttribute에는 표시 이름이 컴파일 타임 상수 여야한다는 점에주의했습니다.)


9
당신이 승자입니다. using System.ComponentModel;그래도 가져야 합니다.
Kezzer

내 코드 생성기가 자동으로 뱉어내어 Pascal 케이스 단어 사이에 공백을 삽입합니다. 매력처럼 작동합니다!
GalacticCowboy

이 솔루션은 꽤 멋져 보이지만 Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type. 따라서이 솔루션은 l18n에 좋지 않은 것 같습니다.
Martin Thoma 2013 년

@moose System.ComponentModel.DataAnnotations.DisplayAttribute리소스 파일을 사용할 수있는 새로운 .NET-4를 반영하도록 답변을 업데이트했습니다 . 아직 4 / 4.5에 있지 않은 경우 이전 버전 System.ComponentModel.DisplayNameAttribute을 다음과 같이 확장 할 수 있습니다. stackoverflow.com/a/2432520/33533
Curtis Buys

@CodeBlend T4를 사용하여 적절한 속성을 가진 모델 클래스를 생성했습니다. 문자열을 대문자로 분할 한 다음 다시 공백으로 결합하는 방법이있었습니다. (3 년이 지났으니 지금은 제 앞에 코드가 없습니다 ...)
GalacticCowboy

51

쉬운 솔루션은보기에 다음을 추가하면됩니다.

@Html.LabelFor(c=>c.MyField, "My Field")

26

MVC 3에는 새로운 오버로드가 있으므로 도우미의 레이블에 대한 사용자 지정 테스트를 지정할 수 있어야합니다.


8
@ Html.LabelFor (모델 => model.IdCode, "친숙한 이름")
데이브 Mateer

3

아직 v2를 다운로드하지 않았기 때문에 테스트 할 수는 없지만 DynamicData처럼 작동한다고 생각합니다.이 경우 모델에서 다음과 같이 할 수 있습니다.

[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}

디스플레이를 사용할 수 없으며 intellisense도 libs에서 찾을 수 없습니다.
Kezzer

System.ComponentModel.DataAnnotations.dll에 대한 참조를 추가하고 System.ComponentModel.DataAnnotations를 사용하여 추가합니다.
Daniel

오히려 GAC에서 System.ComponentModel.DataAnnotations에 대한 참조를 추가하십시오 (예 : 참조 추가의 .NET 탭)
Daniel

이미 DataAnnotations를 사용하므로 참조가 문제가 아닙니다.
Kezzer

3
아, 죄송합니다. 분명히 Silverlight3 / .NET 4.0입니다 : msdn.microsoft.com/en-us/library/… DisplayName이 원하는 작업을 수행 할 것 같습니다. itsmecurtis가 제안한대로. 자세한 내용은 다음과 같습니다. davidhayden.com/blog/dave/archive/2009/08/19/…
Daniel

2

두 가지 방법이 있습니다
(1) "직접 주석을"
2 "리소스와 Annotatinos"
직접 주석

[Display(Name = "My Field")]
public string MyField { get; set; }

리소스가있는 Annotatinos

[Display(Name = "My_Field",ResourceType = typeof(Resource))]
public string MyField { get; set; }

두 번째 방법은 Resource.resx 라는 이름의 리소스 파일에 값을 추가해야합니다 .
목적에 맞는 사용.


0

아직 CP1을 확인하지 않았지만 Scott의 릴리스를 읽었으며 코드가 T4에서 생성 된 것을 기억하는 것 같습니다. 나는 당신이 항상 그것을 수정할 수 있다고 생각하지만 CP2에서 과부하를 제공 할 것이라고 생각합니다.

편집 : 소스는 항상 사용할 수 있으므로 방법을 변경하고 T4 생성기를 변경하면됩니다. 또한 해당 모드에 대한 티켓이나 요청 (어떻게 든)을 넣어 다음 버전에서 작업하도록합니다.


부끄러운 일입니다. 저는 작업 미리보기를하고 있지만 우리의 필드 이름이 설명에 비해 상당히 가짜이기 때문에 실제로 실행 가능하지 않습니다.
Kezzer

0

5 개의 과부하가 있습니다. 몇몇은 "The Super Fantastic Field"로 설정하는 "string labelText"의 두 번째 매개 변수를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.