2014-06-23 3 views
2

IClientValidatable을 구현하는 사용자 지정 ValidationAttribute가 있습니다. 그러나 실제로 클라이언트 측에 유효성 검사 규칙을 출력하기 위해 GetClientValidationRules는 호출되지 않습니다.GetClientValidationRules는 MVC 응용 프로그램에서 호출되지 않습니다.

속성에 특별한 것은 없지만 어떤 이유로 든 절대로 호출되지 않습니다. Application_Start()에 어댑터 등록을 시도했지만 그 또한 작동하지 않습니다. 위해 Application_Start에서

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] 
public class CustomAttribute : ValidationAttribute, IClientValidatable 
{ 
    public override bool IsValid(object value) 
    { 
     return true; 
    } 
    #region IClientValidatable Members 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     string errorMessage = FormatErrorMessage(metadata.GetDisplayName()); 

     yield return new ModelClientValidationRule { ErrorMessage = errorMessage, ValidationType = "custom" }; 
    } 

    #endregion 
} 

public class CustomAdapter : DataAnnotationsModelValidator<CustomAttribute> 
{ 
    public CustomAdapter(ModelMetadata metadata, ControllerContext context, CustomAttribute attribute) 
     : base(metadata, context, attribute) 
    { 
    } 
    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     return this.Attribute.GetClientValidationRules(this.Metadata, this.ControllerContext); 
    } 
} 

() 나는이 : 나는 그것을 명중되지 않습니다 GetClientValidationRules 내부에 중단 점을 넣어

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomAttribute), typeof(CustomAdapter)); 

.

+0

눈에 거슬리지 않는 유효성 검사를 사용합니까? 그렇다면 web.config에서 설정 했습니까? 이 속성을 모델의 속성에 적용 했습니까? Html.TextBoxFor와 같은 표준 mvc Html 헬퍼를 사용하여이 속성을 가진 속성을 렌더링합니까? – Lanorkin

답변

0

GetClientValidationRules() 메서드를 호출하려면 클라이언트 측 유효성 검사 지원을 호출해야합니다.

의 Web.config에서 (응용 프로그램의 모든 페이지) :

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 

또는 단지 특정 뷰 :

중 하나

@{ Html.EnableClientValidation(); } 
그것은 다음과 같은 방법으로 수행 할 수 있습니다

또는

@(ViewContext.ClientValidationEnabled = true) 

반드시 읽어주십시오.

@using (Html.BeginForm()) 

진술. 당신은 (현재 표준 것 같다) JQuery와 눈에 거슬리지 검증를 사용하는 경우

, 당신은 또한이 기능을 사용하도록 설정해야합니다 :

<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

의 web.config 또는

@Html.EnableUnobtrusiveJavaScript() 
특정보기의 경우