2016-08-25 16 views
0

データベースに何もない場合にパラメータが必要な場合にインストールされたEA、IE。誰かが何かを創造しているのは初めてです。ExpressiveAnnotations Requiredクライアントサイド検証の場合

ただし、モデルが部分ビューになっても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) 

しかしRequiredIfを使用して、普通の「必須」、オフ細かいXML値クライアント側の火災を使用して任意の検証を行うことができません。私はGlobal.asaxのisntallation手順に従っています

答えて

0

あなたのHTMLは期待通りに生成されていません。そのため、シリアライズされたフォームはモデルバインダーによって正しく認識されず、正しくデシリアライズできません。 @Html.EditorFor(model => model.AddTestStepModel.AddTestStepParametersModel, "AddParameters").

  • 移動ビュー]でAddParameters.cshtmlテンプレート... \ EditorTemplates変更

  • 、ディレクトリ\ @Html.Partial(...呼び出し:代わりに、部分図の

    は、エディタのテンプレートを使用します

    これらの2つの呼び出しの出力HTMLを比較すると、

    が表示されますAddTestStepModel.AddTestStepParametersModel.AddTestStepXmlParameterModels[0].XmlValue:それぞれのフィールドをマップするために、バインダーが使用するフルネームを、レンダリングエディタテンプレートとは対照的にAddTestStepXmlParameterModels[0].XmlValue
    • 短い入力は、部分的なビューの名前をフィールドに入力します。上でそれを使用しようとすると、私は、しかし (私はテスト文字列を作成し、XMLパラメータと同じロジックを使用し、それが動作します)RequiredIfの検証は、現在のモデルのいくつかの性質のために働くことを確認しました
+0

HttpPostedFileBaseでは、RequitedIfは要件をチェックすることができず、ユーザーはファイルをアップロードせずにフォームを送信できます。 – TLBB

関連する問題