Как применить проверку к элементу коллекции в 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' />
Теперь мой вопрос: как мне применить к этому подтверждение? Microsoft Validation не будет продвигать проверку внутри mvcClientValidationMetadata, я предполагаю, что причина в том, что инфраструктура не видит привязки модели во время загрузки представления.
Есть идеи??
1 ответ
Я считаю, что вы спрашиваете, как проверить значения из выпадающего списка с атрибутом "Обязательно". Вам нужно будет внести некоторые изменения в модель 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)%>
Теперь, когда вы пытаетесь отправить без выбора отдела, он должен быть проверен