簡體   English   中英

客戶端驗證需要ExpressiveNnnotations

[英]ExpressiveAnnotations RequiredIf Client Side Validation

如果數據庫IE中沒有任何內容,則安裝EA以嘗試使用參數。 這是有人第一次創作。

但是,RequiredIf永遠不會為客戶端驗證觸發,即使模型進入局部視圖時,BindingExists bool設置為false並且Xml值仍為null。

模型:

    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)

當只使用普通的“必需”時,Xml Value客戶端會觸發罰款,但是使用RequiredIf無法進行任何驗證。 我遵循了Global.asax的isntallation步驟

您的HTML未按預期生成。 因此,模型綁定器無法正確理解序列化形式,無法正確反序列化。

而不是部分視圖使用編輯器模板:

  • 在Views ... \\ EditorTemplates \\目錄下移動AddParameters.cshtml模板,

  • 更改@Html.Partial(...調用@Html.EditorFor(model => model.AddTestStepModel.AddTestStepParametersModel, "AddParameters").

當您比較這兩個調用的輸出HTML時,您將看到

  • 部分視圖的短輸入字段名稱: AddTestStepXmlParameterModels[0].XmlValue
  • 與編輯器模板呈現全名相反,綁定器使用它來映射相應的字段: AddTestStepModel.AddTestStepParametersModel.AddTestStepXmlParameterModels[0].XmlValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM