2014-10-14 5 views
0

어떤 텍스트 필드에 값이 있는지에 따라 모델 유효성 검사와 관련된 문제가 있습니다.모델 데이터 유효성 검사

내보기에서
public class Person 
    { 
     [DisplayName("Forename")] 
     [Required(ErrorMessage = "Please enter a forename")] 
     public string Forename { get; set; } 

     [DisplayName("Surname")] 
     [Required(ErrorMessage = "Please enter a surname")] 
     public string Surname { get; set; } 

     [DisplayName("Country")] 
     [Required(ErrorMessage = "Please enter a country")] 
     public string Country { get; set; } 

     [DisplayName("Phone Number")] 
     [Required(ErrorMessage = "Please enter a phone number")] 
     public string Phone { get; set; } 

     [DisplayName("Mobile Number")] 
     [Required(ErrorMessage = "Please enter a mobile number")] 
     public string Mobile { get; set; } 
    } 

내가 표시 뒤따라야, 성이, 나라가 다음 코드를 사용하여 텍스트 필드와 같은 & 전화 :

@Html.LabelFor(x => x.Forename) 
@Html.TextBoxFor(x => x.Forename) 
@Html.ValidationMessageFor(x => x.Forename) 

을 사용자가 전화 번호가없는 경우 나 간단한 모델을 가지고 버튼을 클릭하면 휴대 전화 번호에 대한 다른 텍스트 필드가 나타납니다. 그러면 "전화"텍스트 필드가 재설정됩니다. 사용자가 휴대폰 번호를 입력하고 양식을 제출하면 실패합니다. 다른 속성에 값이없는 경우 속성 유효성 만 검사하는 조건부 문을 내 모델 유효성 검사에 사용할 수 있습니까?

"모바일"에 값이 있지만 "전화"가 없다면 유효성 검사는 "모바일"의 유효성을 검사하지만 "전화"는 무시합니다. 마지막 문단이 충분히 명확하지 않은 경우 사과드립니다. 어떤 도움이라도 대단히 감사하겠습니다.

if (Condition) 
{ 
    ModelState.AddModelError("PropertyNameHere", "ErrorMessageHere"); 
} 

아래

+0

당신은 모델 IValidatableObject를 구현하고 거기 더 복잡한 검증을 가질 수있다. –

답변

0

당신은 항상 컨트롤러에서 유효성 검사를 할 수있는, 의사 코드는있는 그대로보기를 유지합니다. 모델에서 [Required()] 태그를 제거하기 만하면됩니다. if (ModelState.IsValid) 코드 위에이 코드를 추가하려고합니다.

0

당신은 같은 간단한 검사와 수동으로 할 수 있습니다 :

if (ModelState.ContainsKey("Phone Number") && !ModelState.ContainsKey("Mobile Number")) 
     ModelState.Remove("Phone Number"); 
else if (!ModelState.ContainsKey("Phone Number") && ModelState.ContainsKey("Mobile Number")) 
     ModelState.Remove("Mobile Number"); 
+0

OP는 클라이언트 측 유효성 검사를 사용하기 때문에 클라이언트에서 실패하고 결코 멀리까지 도달하지 않습니다. –