2011-11-18 4 views
2

MVC 3 응용 프로그램이 있습니다. RemoteAttribute와 고유 한 것으로 검증 된 전자 메일 필드가 포함 된 UserModel이라는 모델이 있습니다. 2 Views - EditUser 및 CreateUser에서 UserModel을 사용하고 싶습니다. 이 필드는 읽기 전용이므로 EditUser보기의 전자 메일 필드에 대한 유효성을 어떻게 허용하고 CreateUser보기에 남겨 둘 수 있습니까?MVC 뷰에서 필드 유효성 검사를 비활성화하는 방법은 무엇입니까?

+0

편집 사용자보기에서 읽기 전용이므로 CreateUser보기의 전자 메일 만 확인합니까? – Dallas

+0

예, 이것이 제가 의미하는 바입니다. 지금 들어, 나는 2 개의 다른 모델을 가지고 있기로 결정했다.이 이유 때문에베이스로부터 물려 받았다. –

답변

1

아래의 예를 참조하십시오. 이 예제는 전자 메일 필드의 모든 오류를 무시합니다.

public class DontValidateEmailAttribute : ActionFilterAttribute { 

    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
    var modelState = filterContext.Controller.ViewData.ModelState; 
    var incomingValues = filterContext.Controller.ValueProvider; 

    var key = modelState.Keys.Single(x => incomingValues.Equals("Email"));  
    modelState[key].Errors.Clear(); 

    } 
} 

이 특성을 편집 컨트롤러에 적용하십시오.

Steve Sanderson's Pro ASP NET MVC 3에서이 기술을 배웠습니다. 그는이 기술을 사용하여 필드가 필요한 모델의 유효성을 검사하지만 데이터 입력은 다단계 마법사입니다. 값이 양식 게시물에 반환되지 않은 경우 해당 속성에 대한 오류를 제거합니다.

+0

흠 .... 어쩌면이게 이상하게 들릴지 모르지만, 나는 만들고 편집하는 작업에 같은 컨트롤러를 사용하고있다. 어쩌면 이것이 약간의 리팩토링을하는 이유입니다. –

+2

편집보기에서 전자 메일의 숨김 필드를 작성하면 게시물에 반환되어 유효하며 유효 할 것입니다. – Dallas

+0

ㅎ))) 좋은 해킹, 아마 작동합니다. 더 나은 해결책을 찾고 나서 얼마 지나지 않아 이것을 사용할 것입니다. 감사 –

1

이 문제를 해결하는 좋은 방법은 usermodel id를 원격 검증 방법으로 adittional 필드로 전달하는 것입니다. 작성시에는 공백이거나 null이지만 편집시 채워집니다. 그런 다음 원격 유효성 검증 메소드에 논리를 추가하여 ID를 확인할 수 있습니다.
당신은 검증 결과를 수정하는 부분 검증 기술을 사용할 수 있습니다

[Remote("ValidationMethod", "UserModel", AdditionalFields = "Id", ErrorMessage = "Error message")] 
관련 문제