2012-02-28 2 views
3

나는 searchstring을 사용하여 searchmodel을 빌드하고 minlength로 꾸며 냈습니다. 내보기에서 검색 문자열에 대한 requierements를 표시하고 싶습니다만 장식에 어떻게 접근 할 수 있습니까?뷰에 모델 장식을 표시하는 방법은 무엇입니까?

모델 :

public class SearchModel 
{ 
    [StringLength(50,MinimumLength = 4)] 
    public string Searchname { get; set; } 
} 

면도기 :

@model Project.Models.SearchModel 

<p> 
    The search value has to be a min length of: ... 
</p> 
+0

상수? 그러나 나는 속성 값을 얻는 함수가 더 좋을 것이라는데 동의한다. 리플렉션을 사용하면 가능하다고 생각합니다. – Marthijn

답변

2

이 작업을 수행 할 수 있습니다 :

@(typeof(SearchModel).GetProperty("Searchname").GetCustomAttributes(true) 
    .OfType<StringLengthAttribute>().First().MinimumLength) 

비록 MVC의 순수성을 위해, 당신은 아마보기 코드로이 논리를 넣어 피해야한다. 다음 중 하나를

  • 은 컨트롤러가이 정보를 별도의 속성으로 모델 자체에 넣어 확인, 또는
  • 모델 메타 데이터를 통해 정보를 사용할 수 있도록 사용자 정의 ModelMetadataProvider를 사용합니다.
+0

당신의 간단한 해결책이 마음에 들지만 문제가 있습니다 ** "메서드 'GetCustomAttributes'에 0 개의 인수가 필요하지 않습니다 ** ** (네임 스페이스도 추가해야 할 필요가 있습니다) – Zoli

+2

잘 작동합니다 : 'typeof (NAMESPACE. SearchModel) .GetProperty ("Searchname"). GetCustomAttributes (true) .OfType (). First(). MinimumLength' – Zoli

1

당신은 클라이언트 측에서 검증 속성에서이 값을 얻을 수 있습니다.

$('#Searchname').attr('data-val-length-min') 

또는 서버면에서 면도기에 필요합니까?

@{ 
    var attr = typeof(NAMESPACE.SearchModel).GetProperty("Searchname").GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.StringLengthAttribute), true)[0]; 
    var min = attr.GetType().GetProperty("MinimumLength").GetValue(attr, null); 
} 
. 
. 
. 
<p>The search value has to be a min length of: @min</p> 
+0

나는 또한 그것에 대해 생각해 봤는데 더 좋은 방법이 없다면 그것을 할 것이다 :-) – jwillmer

+1

면도칼/C# 솔루션도 추가했다. 즐겨! – Zoli

관련 문제