我有一個Html.BeginForm()視圖,它調用了在主視圖模型中傳遞的部分視圖(下面提到並且沒有表單)。該模型具有數據註釋。沒有部分視圖的數據val *屬性
如果我嘗試提交而沒有選擇正確的值,頁面驗證的初始加載完美工作。
我也有頁面上的另一個按鈕,如果點擊加載相同的局部視圖在頁面上的另一個實例,使用$ .ajax()張貼到控制器,它只返回PartialView,並將其追加到現有的div 。
如果我現在嘗試提交表單這些動態控件,儘管它們綁定到相同的模型,並且雖然我設置了正確的.ValidationMessageFor幫助器,但由於控件似乎並未與data-val *屬性。
我使用了fiddler,發現$ .ajax發佈到控制器後,生成了部分視圖,並且生成了簡單且沒有ValidationMessage的消息。因此無法使用不顯眼的javascript來添加動態控件。
是否有必要將窗體視圖永遠放置在一個窗體中?在這種情況下,我將嵌套窗體並且不能正常工作。
編輯1: 正如Adam Tuliper在question中提到的ViewContext.FormContext = new FormContext生成了具有所有data-val *屬性的局部視圖。因此回答我的上述問題。 現在,對動態內容的驗證並未觸發。根據Erick(在註釋部分),我刪除了表單驗證器[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; }
}
您應該將編輯移動到您的答案中,而不是將其作爲問題的一部分加入! – Hannele