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 –