3

내 ASP.NET MVC 프로젝트의 경우 사용자 지정 유효성 검사 특성을 만들었습니다. 나는 쿼리 문자열에 속성 이름을 추가하는 것을 시도하고있는 fullUrl 변수에 대한사용자 지정 유효성 검사 : validationContext에서 속성 이름 가져 오기

https://bitbucket.org/tugberk/tugberkug.mvc/src/6cc3d3d64721/TugberkUg.MVC/Validation/ServerSideRemoteAttribute.cs

:

protected override ValidationResult IsValid(object value, ValidationContext validationContext) { 

     //Here I need to resolve the url in order to make a call to that controller action and get the JSON result back 

     var httpContext = new HttpContextWrapper(HttpContext.Current); 
     var urlHelper = new UrlHelper(
      new System.Web.Routing.RequestContext(
       httpContext, new System.Web.Routing.RouteData() 
      ) 
     ); 
     var url = urlHelper.Action(Action, Controller, null, 
      urlHelper.RequestContext.HttpContext.Request.Url.Scheme); 

     var fullUrl = string.Format("{0}?{1}={2}", url, 
      /*validationContext.MemberName*/"term", value); 

     if (!GetResult(fullUrl)) { 

      var message = FormatErrorMessage(validationContext.DisplayName); 
      return new ValidationResult(message); 
     } 

     return null; 
    } 

당신은 아래 링크에서 전체 코드를 볼 수 있습니다 여기에 내가 고민하고있는 코드는 하지만 validationContext.MemberName을 사용하면 실패합니다. 임시 수정으로 문제를 "용어"로 고정시킴으로써 해결했지만 수정이 전혀 아닙니다.

그렇다면 validationContext에서 속성 이름을 검색하는 방법은 무엇입니까?

+0

동일한 문제가 있습니다. 나는 더 나아가 유효성 검사중인 속성에 대한 모든 CustomAttributes를 얻고 싶습니다. 안타깝게도 validationContext는이 정보를 얻기 위해 사용할 수있는 프로퍼티/메소드를 포함하고 있지 않습니다. – Peter

+0

자세한 내용은 여기를 참조하십시오. http://stackoverflow.com/questions/7447932/mvc-3-model-validation-issue-oversight-or-by-design –

답변

2

validationContext.DisplayName이 트릭을 수행합니까?

그런 다음

var displayName = validationContext.DisplayName; 

var memberName = validationContext.ObjectType.GetProperties() 
    .Where(p => p.GetCustomAttributes(false).OfType<DisplayAttribute>().Any(a => a.Name == displayName)) 
    .Select(p => p.Name) 
    .FirstOrDefault(); 

아마도 MemberName과를 얻을 반영 할 수 있을까?

+1

DisplayName과 MemberName이 다릅니다. – tugberk

+0

네, 맞습니다 - 제 코드에서는 DisplayName을 통해 멤버의 이름에 액세스 할 수 있고 해당 멤버에 DisplayAttribute를 가질 수 있는지 선택해야했습니다. – PeterFearn

+0

비록 그것이 좋을지 모르지만 가능한 해결책으로 나의 대답을 편집 할 것입니다. – tugberk

관련 문제