メインビューモデルに渡される部分ビュー(以下で説明し、フォームを持たない)を呼び出す 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; }
}