2011-07-06 2 views
2

보기에서 Html.LabelFor()을 사용하는 대신 모델 속성의 DisplayName 속성 값을 어떻게 넣을 수 있습니까? Html.LabelFor() 나를 위해 전나무가 아니야 내 페이지 레이아웃을 손상시키는 <label for=""></label>이 나옵니다. 그래서 여기 는 모델의 재산의 샘플입니다 : 사전에DisplayName에 대한 텍스트 만

[DisplayName("House number")] 
     [Required(ErrorMessage = "You must specify house number")] 
     [Range(1, 9999, ErrorMessage = "You have specify a wrong house number")] 
     public UInt32? buildingNumber 
     { 
      get { return _d.buildingNumber; } 
      set { _d.buildingNumber = value; } 
     } 

고마워, 얘들 아!

답변

2

당신은 메타 데이터를 가져올 수 :

<% 
    var displayName = ModelMetadata 
     .FromLambdaExpression(x => x.buildingNumber, Html.ViewData) 
     .DisplayName; 
%> 

<%= displayName %> 
+0

감사 대린처럼보기에이를 사용하는 클래스의 네임 스페이스를 가져 확인이 콘텐츠와 클래스를 만듭니다! 그게 내가 필요한거야. – kseen

3

이 메타 데이터의 표시 이름을 얻어야한다 :

@ModelMetadata.FromLambdaExpression(m => m.buildingNumber, ViewData).DisplayName 

편집 :

나는 여전히에 대한 문을 사용할 수있을 것 같아요 MVC2, 그냥 @을 변경하십시오 :

< % : ModelMetadata.FromLamb daExpression (m => m.buildingNumber, ViewData) .DisplayName %>

+0

답변 해 주셔서 감사합니다. Martin! 귀하의 대답은 MVC3 면도기 뷰 엔진이지만 MVC2를 사용하므로 그렇게 할 수 없습니다. – kseen

3

http://weblogs.asp.net/imranbaloch/archive/2010/07/03/asp-net-mvc-labelfor-helper-with-htmlattributes.aspx에서 많이 빌리 자이 작업을 수행하는 확장 방법을 만들었습니다. 항상 안전한 span 태그로 출력합니다. span 태그를 완전히 생략하여이 경우 속성을 사용할 수 없기 때문에 두 개의 오버로드를 제거하도록 수정할 수도 있습니다.

는 페이지가 다음 Html.DisplayNameFor(x => x.Name)

public static class DisplayNameForHelper 
{ 
    public static MvcHtmlString DisplayNameFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) 
    { 
     return DisplayNameFor(html, expression, new RouteValueDictionary()); 
    } 

    public static MvcHtmlString DisplayNameFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) 
    { 
     return DisplayNameFor(html, expression, new RouteValueDictionary(htmlAttributes)); 
    } 

    public static MvcHtmlString DisplayNameFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) 
    { 

     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
     string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
     string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
     if (String.IsNullOrEmpty(labelText)) 
     { 
      return MvcHtmlString.Empty; 
     } 
     TagBuilder tag = new TagBuilder("span"); 
     tag.MergeAttributes(htmlAttributes); 
     tag.SetInnerText(labelText); 
     return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 

    } 
} 
+0

MVC3 프로젝트에서는이 프로젝트를 편리하게 사용할 수 없기 때문에 테스트를 해봤지만 많은 어려움없이 거기에서 작업 할 수있을 것으로 기대합니다. –

관련 문제