2014-01-10 2 views
0

ASP MVC를 사용하는 webapp에서 작업하고 있습니다. 나는 사용자의 데이터를 편집하기위한 페이지를 만들고있다 (모델 USER, ModifyUser보기).사용자 정의 ViewModel을 통해 모델의 메타 데이터를 검증하는 방법은 무엇입니까?

나는이 방식으로 검증 된 모델이 있습니다

[MetadataType(typeof(USERS_Metadata))] 
public partial class USER 
{ 
    public class USERS_Metadata 
    { 
     [Required(ErrorMessage = "FALTA NOMBRE")] 
     [StringLength(30, ErrorMessage = "Nombre entre 3 y 30 caracteres", MinimumLength = 3)] 
     [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage = "Error en el formato del nombre.")] 
     public string NAME { get; set; } 

그때 자동적으로 사용자 입력의 유효성을 확인 뷰 사용

<div class="editor-label"> 
     <%: Html.LabelFor(model => model.SURNAME) %> 
    </div> 
    <div class="editor-field"> 
     <%: Html.EditorFor(model => model.SURNAME) %> 
     <%: Html.ValidationMessageFor(model => model.SURNAME) %> 
    </div> 

문제는 내보기도 액세스 거 필요입니다 USERCATEGORY와 같은 자체 모델을 가진 일부 엔티티는 강하게 유형이 지정된 뷰를 조금 더 불편하게 만듭니다.

덧붙여서, 더 중요 할 수도 있습니다. 내보기가 사용자의 세션 ID와 같은 속성을 처리하고 심지어 알지 못하도록하고 싶지 않습니다. 현재이 기능을 처리하고 있습니다. (그리고 나는 그것을 싫어합니다.) :

<%: Html.HiddenFor(model => model.SESSIONID) %> 

내가 완전히 착각하지 않는 한, 가장 정상적인 옵션은 사용자 지정 ViewModel을 만드는 것입니다. 내 ModifyUserViewModel을 빌드하여 내 뷰에서 필요로하는 USER의 필드와 일치시키고 다른 모델의 일부 필드를 추가하기로 결정했습니다. 그러나 USER에서 메타 데이터를 전파하는 방법을 모릅니다. 필드 검증을 위해 새로운 ViewModel에 전달한다. 이 메타 데이터는 데이터베이스에서 자동으로 생성되며이를 복사하면 내게도 작동합니다.

ViewModel을 사용하여 현재 수행중인 것처럼 뷰에서 유효성을 검사 할 수있는 가장 정교하고 유지 보수가 쉬운 가장 쉬운 방법은 무엇입니까?

+0

왜 세션 ID에 숨겨진 것을 첨부해야합니까? 어디에서나 사용하고 있습니까? –

+0

제출하지 않으면 sessionId가 null 일 수 없다는 불만을 제기합니다 (전체 모델의 유효성 검사를 시도 함). – jesusiniesta

답변

0

여러 도메인 모델의 집합체로보기 모델을 구축하려고 :

public class MyViewModel { 
    public USER User { get; set; } 
    public USERCATETORY Category { get; set; } 
} 

은 훌륭한 기사 here를 참조하십시오.