私は作業シナリオを持っています - 私のビューモデルには Employee オブジェクトのリストが含まれています。
List<Employee> Employees;
このリストには次のように入力します。
Employees = EmployeeService.GetAll().ToList();
これはうまくいきます。従業員を表示し、データを更新し、ポスト バックして db に保存できます。
ただし、上記のコードを次のように置き換えて、ビューに送信する前にビューモデルで従業員のリストを並べ替えようとすると、次のようになります。
Employees = EmployeeService.GetAll().OrderBy(e=>e.Name).ToList();
ビューには、注文された従業員の詳細が適切に取り込まれています。残念ながら、このビューモデルをコントローラーにポストバックすると、viewmodel.Employees は null / 空になります。
ここで何が間違っているのか、またはソート時にのみこれが発生する理由を誰かが知っている場合は、助けていただければ幸いです。
よろしく
編集 -
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 コンテキストを呼び出し、すべてのレコードを返します。