2010-03-22 6 views
1

ASP.NET MVC 2를 사용하고 있으며 뷰 - 뷰 당 뷰 방식을 사용하고 있습니다. 또한 Automapper를 사용하여 내 도메인 모델의 속성을보기 모델에 매핑합니다. ASP.NET MVC 2에서 모델 바인딩 및 유효성 검사가 수행되는 순서는 무엇입니까?

(필수 데이터 주석이 검증을 위해 속성)이 예보기 모델을 가지고 : 게시물 편집기보기에서

public class BlogPost_ViewModel 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Title { get; set; } 
    [Required] 
    public string Text { get; set; } 
} 

를 내가 서식있는 텍스트 편집기 (CKeditor)를 사용하고 있습니다. CKeditor는 HTML 편집기이기 때문에 양식 제출시 사용자의 입력을 HTML 인코딩하는 데 CKeditor가 필요하므로 ASP.NET의 입력 유효성 검사가 불평하지 않습니다. 이것은 CKeditor가이 기능을 내장하고 있기 때문에 문제가되지 않지만, Automapper를 통해 도메인 객체로 다시 매핑하기 전에 CKeditor의 출력을 디코딩해야합니다.

나는 다음과 같이이 문제를 해결하기 위해 (위의 뷰 - 모델에) 새로운 속성을 추가 걸려 : Automapper를

public string HTMLEncodedText { 
    get { return HTMLEncode(Text); } 
    set { Text = HTMLDecode(value); } 
} 

내가 다음보기에서 CKeditor이 속성을 바인딩 할 수 있습니다,하지만 여전히 사용 컨트롤러의 'Text'속성을 매핑 할 수 있습니다.이 모든 기능을 통해 입력 확인 기능을 해제하지 않아도됩니다.

제 질문은 : ASP.NET MVC 2의 모델 바인딩 및 유효성 검사 프로세스가 어떻게 작동하는지 알고 있습니까? 유효성 검사가 수행되기 전에 모든 모델 속성이 바인딩됩니까? 또는 각 개별 속성이 설정 될 때 유효성이 검사됩니다. 내 아이디어가 이상적으로 작동하려면 모델을 검증하기 전에 모든 속성을 설정해야합니다.

답변

1

속성의 유효성을 검사 한 다음 바인딩됩니다. 따라서보기 모델의 경우 Text 속성이 아닌 HTMLEncodedText 속성에 [Required] 속성을 설정해야 할 수 있습니다.

+0

당신은 당연한 것입니다. 바로 클라이언트 측 유효성 검사 기능을 사용하기 위해 모든 유효성 검사 특성을 새 속성으로 이동해야한다는 것을 알았습니다. –