我有一个强类型视图,它包含控件(输入框)来表示集合项。因此,举一个例子,以一个视图为例来添加一个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中推送验证,我假设这是因为框架在视图加载时没有看到任何模型绑定发生。
任何想法??
答案 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)%>
现在,当您尝试在不选择部门的情况下提交时,应该进行验证