Как применить проверку к элементу коллекции в 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)%>

Теперь, когда вы пытаетесь отправить без выбора отдела, он должен быть проверен

Другие вопросы по тегам