2016-09-06 1 views
0

MVC ViewModel을 사용하고 있습니다. 양식에 예 또는 아니요라는 두 개의 라디오 버튼이 있습니다. 사용자가 '예'를 선택하면 TextField1이 표시되고 '아니오'를 선택하면 TextField2가 표시됩니다. 둘 다 * (asterick) 기호가있는 필수 필드입니다. 둘 다 필수 필드 인 경우 사용자는 라디오 버튼 선택에 따라 한 번에 하나의 TextField 만 채울 수 있습니다. 문제는 사용자가 필요한 텍스트 필드 중 하나를 제출할 때 오류 메시지가 표시되는 것입니다. 이 문제를 해결할 수있는 해결 방법이 있습니까?MVC 폼 유효성 검사에 실패했습니다. 사용하지 않은 필드가 두 개 필요합니다.

+0

DataAnnotation으로 모델에서 두 필드가'Required'로 선언 되었습니까? –

+0

예. 둘 다 필수 입력란입니다. – VVR147493

+0

그래서 당신은 자바 스크립트를 사용하고 있습니까? 그렇지 않다면 모델의'Required' 데이터 어노테이션을 취하지 말고 JS에서 하나 또는 다른 라디오 버튼이 선택되었는지 확인하십시오. 그렇다면'.attr ("required")'? –

답변

1

두 개만 표시하는 경우을 입력해야합니다.

이 문제를 해결하는 가장 쉬운 방법 중 하나는 뷰 모델을 사용하여 페이지에 DTO 개체를 전달하는 것의 장점 중 하나입니다.

코드를 제공하지 않았으므로 여기서 많은 가정을해야합니다. 그러나 질문은 간단합니다. 내 가정이 틀린 경우에도 원칙을 특정 유스 케이스에 쉽게 적용 할 수 있습니다.

내가 당신의 객체가이 같은 형태의 가정거야 :

public class DtoObject 
{ 
    public bool IsPositiveSelection { get; set; } 
    public string YesReason { get; set; } 
    public string NoReason { get; set; } 
} 

을 무슨 일이 일어나고 있는지에 대한 지식과 함께, 당신이 그것을위한 좋은 이유가 가정합니다. 아마도 하나의 이메일 주소를 요구하고 다른 이메일 주소를 요청할 것입니다.

당신이하지 않았다면,이 같은 뷰 모델을 만들 것입니다 : 여기 한 대신 두 개의 상자를 만드는 무엇

public class DtoObjectViewModel 
{ 
    public bool YesNoRadio { get; set; } 
    [Required] 
    public string Reason { get; set; } 
} 

는 항상 표시됩니다 하나 하나가 . 하나의 전자 메일 유효성 검사와 다른 전자 메일 유효성 검사와 같은 전화 번호가 필요한 경우 특성을 사용하는 대신 JavaScript로 적용 할 수 있습니다.

이 다음에 관계없이, 당신이 값은 항상이 있는지 확인 할 수있는 라디오 버튼이있는 상태.

을 어떤 시점에서, 당신은 당신의 DTO 개체로 다시보기 모델을 매핑해야합니다 :

private DtoObject MapToDto(DoObjectViewModel model) 
{ 
    return new DtoObject 
    { 
     IsPositiveSelection = model.YesNoRadio, 
     YesReason = model.YesNoRadio ? model.Reason : "", 
     NoReason = model.YesNoRadio ? "" : model.Reason 
    }; 
} 

다른 옵션도 많이 있지만, 자바 스크립트가 더 많이 필요하며, 이보다 더 광범위한 JavaScript가 필요합니다.

+0

빠른 업데이트 주셔서 감사합니다. 이것은 자바 스크립트를 사용하는 대신 가장 좋은 대답 인 것 같습니다. 그러나 사용자가 제출할 때 적절한 필드에 대해 유효성 검증 오류 메시지를 표시하려고합니다. 하나의 필드 만 사용하는 경우 선택한 오류 메시지에 대해 특정 오류 메시지를 표시 할 수 없습니다. – VVR147493

+0

이 방법을 사용하면 상자 중 하나를 표시하거나 숨기지 않을 것입니다. 당신은 여전히 ​​자바 스크립트가 필요할 것이지만 이것은 아마도 최소한의 작업 일 것입니다. – krillgar

+0

또는 서버에서 보조 유형 검사를 항상 실행하고 ModelState에 오류를 추가하여이를 페이지로 되돌릴 수 있습니다. – krillgar

관련 문제