Development Tip

mvc3의 razor에서 LabelFor의 표시 이름을 변경하는 방법은 무엇입니까?

yourdevel 2020. 10. 6. 19:32
반응형

mvc3의 razor에서 LabelFor의 표시 이름을 변경하는 방법은 무엇입니까?


면도기 엔진에서는 LabelFor도우미 메서드를 사용 하여 이름을 표시했습니다.

그러나 표시 이름은 표시하기에 좋지 않은 것 같습니다. 그래서 내 표시 이름을 변경해야합니다.

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 

속성을 사용하여 뷰 모델 속성을 장식 [DisplayName]하고 사용할 텍스트를 지정할 수 있습니다.

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

또는 텍스트를 지정할 수있는 LabelFor 도우미의 다른 오버로드를 사용합니다.

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

그리고 아니요, LabelFor도우미가 지원하지 않으므로 MVC3에서 클래스 이름을 지정할 수 없습니다 . 그러나 이것은 MVC4 또는 5에서 작동합니다.


이것은 오래된 질문 이었지만 기존 답변은 모델을 다시 생성 할 때 사용자 지정 특성을 버리는 심각한 문제를 무시합니다. 현재 사용 가능한 옵션을 다루기 위해 더 자세한 답변을 추가하고 있습니다.

세 가지 옵션이 있습니다.

  • [DisplayName("Name goes here")]데이터 모델 클래스에 속성을 추가하십시오 . 단점은 데이터 모델을 재생성 할 때마다 버려진다는 것입니다.
  • 문자열 매개 변수를 Html.LabelFor. 예 : @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})참조 : https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx 단점은 레이블을 반복해야한다는 것입니다. 모든 관점에서.
  • 세 번째 옵션입니다. 데이터 클래스에 연결된 메타 데이터 클래스를 사용합니다 (세부 사항은 다음 참조).

옵션 3-메타 데이터 클래스 추가 :

Microsoft는 기존 클래스를 수정하지 않고도 Entity Framework 클래스의 속성을 장식 할 수 있습니다 ! 이는 데이터베이스 클래스에 연결되는 메타 데이터 클래스 (효과적으로 EF 클래스의 측면 확장)를 가짐으로써 가능합니다. 이렇게하면 데이터 모델을 재생성 할 때 변경 사항이 손실되지 않도록 클래스 자체가 아닌 관련 클래스에 속성을 추가 할 수 있습니다 .

예를 들어 데이터 클래스 MyModelSomekingStatus속성이있는 경우 다음과 같이 할 수 있습니다.

먼저 같은 이름 부분 클래스선언 하고 같은 네임 스페이스를 사용하여 재정의하지 않고 클래스 속성을 추가 할 수 있습니다.

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}

생성 된 모든 데이터 모델 클래스는 부분 클래스이므로 동일한 이름의 더 많은 클래스를 생성하여 추가 속성 및 메서드를 추가 할 수 있습니다 (매우 편리하며 모델에서 다른 필드 유형의 형식화 된 문자열 버전을 제공하는 데 자주 사용합니다. ).

2 단계 : 새 부분 클래스에서 참조하는 메타 데이터 클래스를 추가합니다.

public class MyModelMetaData
{
    // Apply DisplayNameAttribute (or any other attributes)
    [DisplayName("My New Label")]
    public string SomekingStatus;
}

참조 : https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx

메모:

  • 메모리에서 메타 데이터 클래스를 사용하기 시작하면 실제 클래스 ( [required]등) 의 기존 속성을 무시할 수 있으므로 메타 데이터 클래스에서 복제해야 할 수 있습니다.
  • 이것은 마법으로 작동하지 않으며 어떤 클래스에서도 작동하지 않습니다. UI 데코레이션 속성을 찾는 코드는 먼저 메타 데이터 클래스를 찾도록 설계되었습니다.

속성을 속성으로 장식하여 레이블의 텍스트를 변경할 수 있습니다 DisplayName.

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

또는 원시 HTML을 명시 적으로 작성할 수 있습니다.

<label for="SomekingStatus" class="control-label">Someking Status</label>

DisplayName 특성을 사용하여 모델 속성을 장식합니다.


@ Html.LabelFor (model => model.SomekingStatus, "foo bar")

참고 URL : https://stackoverflow.com/questions/11651254/how-to-change-the-display-name-for-labelfor-in-razor-in-mvc3

반응형