2

メインビューモデルに渡される部分ビュー(以下で説明し、フォームを持たない)を呼び出す Html.BeginForm() を含むビューがあります。モデルにはデータ注釈があります。

適切な値を選択せず​​に送信しようとすると、ページの初期ロード時に検証が完全に機能します。

また、ページに別のボタンがあり、クリックすると同じ部分ビューの別のインスタンスがページに読み込まれます。コントローラーへの $.ajax() ポストを使用すると、PartialView だけが返され、既存の div に追加されます。

これらの動的コントロールをフォームに送信しようとすると、それらは同じモデルにバインドされており、正しい .ValidationMessageFor ヘルパーを設定しましたが、コントロールが data-val で生成されていないように見えるため、それらの検証は表示されません。 *属性。

私はフィドラーを使用し、コントローラーへの $.ajax ポストが、生成された場所でも単純で ValidationMessage のない部分ビューを生成することを発見しました。したがって、追加された動的コントロールに控えめな JavaScript を使用することはできません。

常にフォーム内にビューを配置する必要がありますか?その場合、ネストされたフォームがあり、うまく機能しません。

EDIT 1 :質問ViewContext.FormContext = new FormContext で Adam Tuliper が述べたように、すべての data-val* 属性を含む部分ビューが生成されました。したがって、上記の質問に答えます。現在、動的コンテンツの検証が起動していませんでした。エリック(コメントセクション)に従って、フォームバリデーター[form.removeData( 'validator');]を削除し、動的コンテンツの検証も開始しました。

以下は部分的なビューです

         <div id="divVehicleInfo">                        
        <fieldset>
            <legend>Vehicle Information</legend>
          @for (var i = 0; i < Model.QuoteInput.Vehicle.Count(); i++)
          {
            <div class="editor-label">
                @Html.LabelFor(model => model.Vehicle[i].VehicleMake)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Vehicle[i].VehicleMake)
                @Html.ValidationMessageFor(model => model.Vehicle[i].VehicleMake)
            </div>

             <div class="editor-label">
                @Html.LabelFor(model => model.Vehicle[i].VehicleModel)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Vehicle[i].VehicleModel)
                @Html.ValidationMessageFor(model => model.Vehicle[i].VehicleModel)
            </div>

          }                              
        </fieldset>                
        </div>

そして、これは部分ビューのモデルです

    public class Vehicle
    {
        public int VehicleID { get; set; }

        [Required]
        [DisplayName("Vehicle Make")]
        public string VehicleMake { get; set; }

        [Required]
        [DisplayName("Vehicle Model")]
        public string VehicleModel { get; set; }

    }
4

2 に答える 2

2

控えめな検証スクリプトを部分ビューに含める必要があります。

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

部分ビューは、DOM が更新された後に再度実行されない限り、配置されているページのスクリプトを継承しません。

于 2012-05-27T18:36:41.247 に答える
1

質問で Adam Tuliper が述べたように、ViewContext.FormContext = new FormContextすべての data-val* 属性を含む部分ビューが生成されました。したがって、上記の質問に答えます。現在、動的コンテンツの検証が起動していませんでした。そのため、Erick (コメント セクション) に従って、フォーム バリデーター [ form.removeData(‘validator’);] を削除し、動的コンテンツの検証も開始しました。

于 2011-07-14T06:40:41.520 に答える