2011-07-13 19 views
2

我有一個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; } 

    } 
+0

您應該將編輯移動到您的答案中,而不是將其作爲問題的一部分加入! – Hannele

回答

1

正如在問題ViewContext.FormContext = new FormContext提及亞當Tuliper生成與所有數據-val中的局部視圖*屬性。因此回答我的上述問題。現在,動態內容的驗證並未觸發。所以根據Erick(在註釋部分),我刪除了表單驗證器[form.removeData(‘validator’);],然後它開始驗證動態內容。

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被更新後再次執行它們。

相關問題