2013-04-28 4 views
1

ViewModel 다음의 내가 있다고 가정 해 봅시다 :모델 검증에서 필드를 제외

public class PersonViewModel 
    { 
     [Required] 
     public String Email { get; set; } 

     [Required] 
     public String FirstName { get; set; } 

     [Required] 
     public String LastName { get; set; } 
    } 

이이 ViewModel 아닌 원래 Entity이다, 나는 처음에, 두 곳에서이 모델을 사용하여 내가 모든 필드를 확인하려면 , 다른 하나는 모델 확인에서 Email 필드를 제외하고 싶습니다. 검증에서 필드를 제외하도록 지정해야합니까?

답변

5

당신은 숨겨진 필드 관련된 모델 상태에서 항목을 제거

ModelState.Remove("Email"); 

를 사용할 수 있습니다.

가장 좋은 방법은 두 가지로 뷰 모델을 분할하는 것입니다

public class PersonViewModel 
{ 
    [Required] 
    public String FirstName { get; set; } 

    [Required] 
    public String LastName { get; set; } 
} 

public class PersonWithEmailViewModel : PersonViewModel 
{ 
    [Required] 
    public String Email { get; set; } 
} 
+0

답장을 보내 주셔서 감사합니다.하지만 [Bind (Exclude = "IsAdmin")]'을 사용하면 어떨까요? – saber

+1

@EAmani : 바인딩은 유효성 검사가 아닌 바인딩에서 제외됩니다. 이러한 문제가 발생하지 않도록하려면 전용 뷰 모델을 만드십시오. – LukLed

+0

위대한 대답은 하나의 클래스를 두 개로 분리하고 다른 클래스의 수퍼 클래스를 만들어 유효성 검사를 더 쉽게 만들었습니다. –

2

못생긴 솔루션 :

ModelState.Remove("Email"); 

권장 솔루션 :
다른 뷰 모델을 만듭니다. VM이보기를 나타 내기 때문에보기에 전자 메일 필드가 없으면 적절한 VM을 만드십시오.

+0

답장을 보내 주셔서 감사합니다. 네가 맞습니다. 두 번째보기에서 다른 VM을 만드는 것이 더 좋습니다. – saber

관련 문제