1

ビュー (部分) とビューモデルの観点から分割した巨大なフォームがあります。

メイン フォーム ビューには、次の呼び出しが含まれています。

@Html.Partial("Educations", @Model)

部分的なビューは、@Model をループすることによってレンダリングされ、レコードごとに Div 行が生成されます (TextBoxFor やその他の Html ヘルパーではなく、TextBox)。

何が起こるかというと、部分ビューに対して検証データ属性が生成されていないということです。

ただし、メインフォームビューを動的にロードしたら、次のことを行います。

(function ($) {

$.fn.updateValidation = function () {
    var form = this.find("form")
        .removeData("validator")
        .removeData("unobtrusiveValidation");

    $.validator.unobtrusive.parse(form);

    return this;
};

})(jQuery);

また、部分ビューには、さらに行を追加するためのボタンが含まれています。行を追加すると、データ検証を手動で挿入するときに、新しく追加された行が検証されます。

問題は、フォームの読み込み時にレンダリングされる行にデータ検証属性がないため、上記のプラグインを呼び出して目立たない検証を再初期化しても、役に立たないか、違いがないことです。

ありがとう

4

1 に答える 1

4

部分ビューにフォーム コンテキストを追加してみてください。

@model MyViewModel
@{
    ViewContext.FormContext = new FormContext();               
}

...
@Html.EditorFor(x => x.Foo)

のような HTML ヘルパーがHtml.TextBoxFor内で使用されていない場合、Html.BeginFormそれらは HTML5 の data-* 属性を発行しません。FormContextスコープ内に がある場合にのみ、これらの属性を発行します。

于 2012-05-15T14:48:16.530 に答える