如何将验证应用于Asp.net MVC 2中的集合项

时间:2012-05-03 22:10:08

标签: asp.net .net asp.net-mvc asp.net-mvc-2 asp.net-mvc-validation

我有一个强类型视图,它包含控件(输入框)来表示集合项。因此,举一个例子,以一个视图为例来添加一个Employee详细信息,并且在其中有一组变量输入字段用于输入Department name。这些输入字段将在客户端动态添加。

以下是这两个实体的类结构:

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' />

现在我的问题是我应该如何对此进行验证? Microsoft验证不会在mvcClientValidationMetadata中推送验证,我假设这是因为框架在视图加载时没有看到任何模型绑定发生。

任何想法??

1 个答案:

答案 0 :(得分:1)

我相信您要求的是如何使用'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)%>

现在,当您尝试在不选择部门的情况下提交时,应该进行验证