0

我有一个工作场景 - 我的视图模型包含一个 Employee 对象列表。

List<Employee> Employees;

我通过以下内容填充此列表:

Employees = EmployeeService.GetAll().ToList();

这工作正常。我可以查看员工、更新他们的数据、回发并保存到数据库。

但是,当我尝试在发送到视图之前对视图模型中的员工列表进行排序时,将上面的代码替换为:

Employees = EmployeeService.GetAll().OrderBy(e=>e.Name).ToList();

该视图很好地填充了有序的员工详细信息。不幸的是,当我将此视图模型发回控制器时,viewmodel.Employees 为空/空。

如果有人知道我在这里可能做错了什么,或者为什么只有在我排序时才会发生这种情况,我将不胜感激。

问候

编辑 -

public ActionResult Index()
{
    EmployeesViewModel _viewModel = new EmployeesViewModel();
    return View(_viewModel);
}

[HttpPost]
public ActionResult Index(EmployeesViewModel viewModel)
{
    // HERE ** - viewModel.Employees is NULL
    EmployeesService.UpdateAllEmployees(viewModel);
    return View(viewModel);
}

编辑-示例标记-

for (int i = 0; i < Model.Employees.Count(); i++)
{
    @Html.HiddenFor(e => e.Employees[i].Id)
    @Html.HiddenFor(e => e.Employees[i].Name)
    <table>
        <tr>
            <td style = "width: 125px">
                @Model.Employees[i].Name
            </td>
            <td style = "width: 125px">
                @Html.CheckBoxFor(e => e.Employees[i].IsActive)
            </td>
        </tr>
    </table>
}    

编辑 - 课程详情

public class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string InitialCode { get; set; }
    public bool IsActive { get; set; }

    public Employee()
    {

    }

}


public class EmployeesViewModel
{
    public List<Employee> Employees { get; set; }
    private readonly EmployeesService EmployeesService;

    public EmployeesViewModel()
    {
        Employees = new List<Employee>();
        EmployeesService = new EmployeesService();
        // Employees = EmployeesService.GetAll().ToList(); //THIS WORKS
        Employees = EmployeesService.GetAll().OrderBy(e=>e.Name).ToList();
    }
}

EmployeesService 只需调用 DB 上下文并返回所有记录。

4

1 回答 1

1

您的 HTML 表单元素需要以 DefaultModelBinder 可以正确解析出集合的方式呈现。看看这个:https ://github.com/danludwig/BeginCollectionItem 。

还阅读这个这个

于 2012-11-27T15:41:05.143 回答