4

この質問は前の質問の繰り返しである可能性があります。その場合は、リンクを投稿してください。いずれにせよ、私はまだこの投稿をやり遂げます。

私はこのモデルを持っています:

public class Employee {
    //omitted for brevity

    public virtual ICollection<ProfessionalExperience> ProfessionalExperiences { get; set; }
    public virtual ICollection<EducationalHistory> EducationalHistories { get; set; }
}

public class ProfessionalExperience {
    // omitted for brevity
}

public class EducationalHistory {
    // omitted for brevity
}

このアクションでビューに表示しています:

[HttpGet]
public ActionResult Edit(int id) {
    using(var context = new EPMSContext()) {
        var employees = context.Employees.Include("ProfessionalExperiences").Include("EducationalHistories");

        var employee = (from item in employees
                        where item.EmployeeId == id && item.IsDeleted == false
                        select item).FirstOrDefault();

        return View(employee);
    }
}

これが私の見解です:

@using(Html.BeginForm()) {
  <div class="editor-label">First Name:</div>
  <div class="editor-field">@Html.TextBoxFor(x => x.FirstName)</div>
  <div class="editor-label">Middle Name:</div>
  <div class="editor-field">@Html.TextBoxFor(x => x.MiddleName)</div>

  @foreach(var item in Model.ProfessionalExperiences) {
      Html.RenderPartial("ProfExpPartial", item);
  }

  @foreach(var item in Model.EducationalHistories) {
      Html.RenderPartial("EducHistPartial", item);
  }
  <input type="submit" value="Save" />
}

foreach各コレクションのビューと部分ビューを使用して、子コレクションをビューに表示します。

編集後アクションを呼び出すと、employeeモデルの子コレクションがnullに設定されます。

[HttpPost]
public ActionResult Edit(Employee employee) {
    using(var context = new EPMSContext()) {

    }

    return View();
}

子コレクションを正しく取得するために何が欠けていますか?

ありがとうございました!

4

1 に答える 1

2

この問題は、MVC がコレクション要素を構築する方法 (html 内の名前) に関連していると思います。この SO の回答を見てください: https://stackoverflow.com/a/6212877/1373170、特に Scott Hanselman の投稿へのリンク。

問題は、手動で反復して個々のRenderPartial()呼び出しを行うと、入力フィールドにインデックスがDefaultModelBinderなく、コレクションを構築する方法がわからないという事実にあります。

2 つの ViewModel タイプ用のエディター テンプレートを個人的に作成し、 と を使用@Html.EditorFor(model => model.EducationalHistories)@Html.EditorFor(model => model.ProfessionalExperiences)ます。

于 2012-09-08T07:21:58.600 に答える