2016-08-25 2 views
0

데이터베이스에 IE가없는 경우 매개 변수가 필요하도록 설치된 EA입니다. 누군가가 뭔가를 창조 한 것은 이번이 처음입니다.ExpressiveAnnotations Required 클라이언트 측 유효성 검사가있는 경우

그러나 모델이 부분 뷰에 들어갈 때 BindingExists bool이 false로 설정되고 Xml 값이 여전히 null 인 경우에도 RequiredIf는 클라이언트 측 유효성 검사에 대해 절대 실행되지 않습니다.

모델 :

public class AddTestStepXmlParameterModel 
    { 

     public ParameterTypeEnum ParameterType { get; set; } 

     public string ParameterName { get; set; } 

     public string Description { get; set; } 


     [RequiredIf("BindingExists == false", ErrorMessage = "An XML File is required: Please Try again")] 
     [FileExtensions(Extensions = "xml", ErrorMessage = "Specify an XML file.")] 
     public HttpPostedFileBase XmlValue { get; set; } 

     public bool BindingExists { get; set; } 

    } 

Global.asax에 :보기

protected void Application_Start() 
{                      
    ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.FirstOrDefault(x => x is DataAnnotationsModelValidatorProvider)); 
    ModelValidatorProviders.Providers.Add(new ExpressiveAnnotationsModelValidatorProvider()); 
} 

스크립트 :

<script src="~/Scripts/jquery-3.1.0.js"></script> 
<script src="~/Scripts/jquery.validate.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script> 
<script src="~/Scripts/expressive.annotations.validate.js"></script> 

부분보기 전화 :

@Html.Partial("AddParameters", Model.AddTestStepModel.AddTestStepParametersModel) 

부분보기 :

@Html.HiddenFor(m => m.AddTestStepXmlParameterModels[k].BindingExists, new {@Value = Model.AddTestStepXmlParameterModels[k].BindingExists}) 
@Html.TextBoxFor(m => m.AddTestStepXmlParameterModels[k].XmlValue, new {type = "file", @class = "btn btn-default btn-file", style = "color:transparent", onchange = "this.style.color = 'black'"}) 
@Html.ValidationMessageFor(m => m.AddTestStepXmlParameterModels[k].XmlValue) 

그러나 RequiredIf를 사용하여, 단지 보통의 "필수", 오프 미세 XML 값 클라이언트 쪽 불을 사용하여 유효성 검사를 수행하는 데 실패합니다. Global.asax와 함께 isntallation 단계를 수행했습니다.

답변

0

HTML이 예상대로 생성되지 않습니다. 이 때문에 직렬화 된 형식은 모델 바인더에서 제대로 이해할 수 없으며 올바르게 직렬화 할 수 없습니다. @Html.EditorFor(model => model.AddTestStepModel.AddTestStepParametersModel, "AddParameters").

  • 이동 뷰 아래 AddParameters.cshtml 템플릿 ... \ EditorTemplates 변화

  • , 디렉토리 \ @Html.Partial(... 호출 대신 부분보기의

    편집기 템플릿을 사용

    두 가지 호출에 대한 출력 HTML을 비교하면

    이 표시됩니다.
    • 짧은 입력 부분 뷰의 이름 입력란 : AddTestStepXmlParameterModels[0].XmlValue, 각 필드를 매핑하는 바인더에 의해 사용되는 전체 이름을 렌더링 편집기 템플릿 달리
    • : AddTestStepModel.AddTestStepParametersModel.AddTestStepXmlParameterModels[0].XmlValue. 나는 RequiredIf 검증은 이제 모델의 일부 속성에 대해 작동하는지 확인했습니다
+0

그러나 (I 테스트 문자열을 생성하고 XML 매개 변수와 같은 논리를 사용하고 작동)는 그것을 사용하려고 할 때 HttpPostedFileBase, RequitedIf 요구 사항을 확인하는 데 실패하고 사용자가 파일을 업로드하지 않고 양식을 전송할 수 있습니다. – TLBB

관련 문제