0

私は作業シナリオを持っています - 私のビューモデルには 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 コンテキストを呼び出し、すべてのレコードを返します。

4

1 に答える 1

1

DefaultModelBinder がコレクションを正しく解析できるように、HTML フォーム要素をレンダリングする必要があります。これをチェックしてください: https://github.com/danludwig/BeginCollectionItem

これこれも読んでください。

于 2012-11-27T15:41:05.143 に答える