2011-02-02 3 views
1

양식에 확인란이있을 때 true 또는 false 값으로 전송되므로 일치하는 속성을 Required로 표시하기에 충분하지 않습니다.Asp.Net MVC 유효성 검사 주석 정규 표현식 특성

모델에서 이것을 확인하는 가장 좋은 방법은 무엇입니까? 내가 문자열 정규식과 일치하는 정규 표현식을 생각하고 있었지만 올바르게 작성하지 않거나 부울 속성에서 작동하지 않습니다.

public bool FeeAgree 
    { 
     get 
     { 
      return _feeAgree; 
     } 
     set 
     { 
      _feeAgree = value; 
     } 
    } 

위의 내용은 유효성을 검사하려는 속성입니다. Html.CheckBoxFor가 숨겨진 필드를 생성하므로 true 또는 false 값이 항상 전달되므로 Required 특성을 사용할 수 없습니다.

+0

당신은 우리를 표시 할 수 있습니다 너의 모델? – frennky

답변

2

부울 속성에 대한 데이터 주석이 필요하지 않습니다. 값이 true 또는 false이 아니면 구문 분석을 시도 할 때 기본 모델 바인더가 사례를 처리하고 모델 오류를 추가합니다. 그래서 기본적으로 그러한 모델 속성을 가짐으로써 단지 true이나 false만을 받아 들일 것입니다. 다른 모든 값은 오류로 간주됩니다. 사용자가 사용자 지정 유효성 검사 속성을 쓸 수있는 체크 박스를 선택하는 것이

[Required] 
public bool? FeeAgree { get; set; } 

보장하기 위해 : 당신이 널 (NULL) 부울을 사용한 경우

당신은 Required 속성 값을 가지고 그것을 적용 할 수 있습니다 : 다음

public class MustBeTrueAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return value != null && (bool)value; 
    } 
} 

과 :

[MustBeTrue(ErrorMessage = "You must accept the terms and conditions")] 
public bool FeeAgree { get; set; } 
+0

그게 문제입니다. 항상 값이 있습니다. 값이 false이면 (즉, 상자를 체크하지 않은 것을 의미합니다), 다시 오류를 보내려고합니다. – JBeckton

+0

@JBeckton, OK, 이제 알았습니다. 맞춤 속성에 대한 내 업데이트를 참조하십시오. –

1

이 솔루션은 클라이언트 측 유효성 검사를 포함하도록 확장 될 수 있습니다. 뷰는 "checkboxtrue"검증 유형을 추가하는 jQuery 코드의 비트를 포함하는 경우 다음

public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable { 

    public override bool IsValid(object value) { 
     return value is bool && (bool)value; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
     ModelMetadata metadata, ControllerContext context) { 

     return new ModelClientValidationRule[] { 
     new ModelClientValidationRule { 
      ValidationType = "checkboxtrue", 
      ErrorMessage = this.ErrorMessage 
     }}; 
    } 
} 

...

jQuery.validator.unobtrusive.adapters.add("checkboxtrue", function (options) { 
    if (options.element.tagName.toUpperCase() == "INPUT" && options.element.type.toUpperCase() == "CHECKBOX") { 
     options.rules["required"] = true; 
     if (options.message) { 
      options.messages["required"] = options.message; 
     } 
    } 
}); 

결과는 클라이언트 측 체크 박스 검증이다

관련 문제