0

我有一個強類型視圖,它保存用於表示集合項目的控件(輸入框)。因此,舉一個例子,以添加員工細節的視圖爲例,其中有可變輸入字段集以輸入部門名稱。這些輸入字段將在客戶端動態添加。如何將驗證應用於Asp.net MVC 2中的集合項目

下面是這兩個實體的階級結構:

public class Employee 
{ 

public int EmployeeID{get;set;} 
public string Name {get;set; } 
public IList<Department> DepartmentList{get;set;} 


} 


public class Deparment { 
[Required(ErrorMessage="This is a required Field")] 
public string Name {get;set; } 
public int ID { get;set; } 

} 

輸入的部門名稱是動態生成和名稱的方式設置,以實現模型發佈

<input type='text' class='input-choice' id='txtChoice0' name='Department[0].Name' /> 

現在我的後綁定問題是我應該如何對此進行驗證?微軟驗證不會推送驗證裏面的mvcClientValidationMetadata,原因是我認爲框架沒有看到任何模型綁定發生在視圖加載時。

任何想法??

+0

您想要更精確地驗證什麼?你還在談論服務器端或客戶端驗證,或者你需要兩個? –

+0

並且你能否在類中包含屬性的屬性標記...即[必需(ErrorMessage =「X is required。」)] – MikeTWebb

+0

@MikeTWebb:那已經存在 –

回答

0

我相信你所要求的是如何使用'Required'屬性驗證下拉列表中的值。您需要對Employee模型進行一些更改。

首先,您需要一個「DepartmentCode」屬性,因爲您將從下拉列表中存儲選定的部門代碼。

然後你就可以有DepartmentList作爲IEnumerable<SelectListItem>

讓你的員工的模型看起來就像

public class Employee 
{  
    public int EmployeeID{get;set;} 
    public string Name {get;set; } 
    [Required(ErrorMessage = "Please select a department")] 
    public string DepartmentCode { get; set; } 
    public IEnumerable<SelectListItem> DepartmentList{get;set; 
} 

你可以得到DepartmentList這樣

public IEnumerable<SelectListItem> DepartmentList 
{ 
    get 
    { 
     //Your code to return the departmentlist as a SelectedListItem collection 
     return Department 
      .GetAllDepartments() 
      .Select(department => new SelectListItem 
      { 
       Text = department.Name, 
       Value = department.ID.ToString() 
      }) 
      .ToList(); 
    } 
} 

終於在視圖

<%: Html.DropDownListFor(model => model.DepartmentCode, Model.DepartmentList, "select")%> 
<%: Html.ValidationMessageFor(model => model.DepartmentCode)%> 

現在,當您嘗試提交而未選擇部門時,應該驗證

+0

感謝您的回答,但不認爲這有幫助,我不需要任何部門代碼,我所需要的是連接到員工對象的部門對象列表。在用戶界面方面,正如我所說的那樣,將會有一個用於輸入員工詳細信息的表單和用於輸入部門名稱的最多五個文本框。部門沒有從任何地方自動填充。這個員工部門也只是一個例子。在我的情況下,孩子和父母對象都被同時添加,就像一個調查問題和它的答案 –

+0

好。所以基本上根據你的例子你將有5個部門領域,但是它應該被驗證,至少有一個部門有價值。我不認爲只需將集合中的Required屬性添加到集合中即可直接實現此目的。您將不得不查看自定義驗證選項。這個討論可能會幫助你(它是MVC3,但應該與MVC2類似)。 HTTP://計算器。com/questions/5816313/mvc3-unobtrusive-validation-group-of-inputs/5817958#5817958 –

+0

關閉但不夠近,表單將會有一個按鈕調用「添加部門」。這將允許用戶添加最多5個部門。一旦你添加,驗證應該適用於所有的人,無論你只是添加1或2,3,4,5 –