私はネット全体を調査しましたが、ここで誰かが私を助けてくれることを願っています。
次の ViewModel クラスがあります。
public class PersonEditViewModel
{
public Person Person { get; set; }
public List<DictionaryRootViewModel> Interests { get; set; }
}
public class DictionaryRootViewModel
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<DictionaryItemViewModel> Items;
public DictionaryRootViewModel()
{
Items = new List<DictionaryItemViewModel>();
}
}
public class DictionaryItemViewModel
{
public long Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}
編集ビューでは、カスタム EditorTemplate を使用して、興味のコレクションをレイアウトします@Html.EditorFor(m => m.Interests)
。レンダリングを行う 2 つの EditorTemplates があります。
DictionaryRootViewModel.cshtml:
@model Platforma.Models.DictionaryRootViewModel @Html.HiddenFor(model => model.Id) @Html.HiddenFor(model => model.Name) @Html.EditorFor(model => model.Items)
DictionaryItemViewModel.cshtml:
@model Platforma.Models.DictionaryItemViewModel @Html.HiddenFor(model => model.Id) @Html.CheckBoxFor(model => model.Selected) @Html.EditorFor(model => model.Name)
問題:
POST を使用してフォームを送信するInterests
と、コレクションのみが入力され、Interest.Items
コレクションは常に空になります。リクエストには (特に) 次のフィールド名が含まれています。これらは、コントローラー アクション メソッドで Request.Forms データを検査するときにも存在します。
- 興味[0].ID
- 興味[0].名前
- Interests[0].Items[0].Id
- Interests[0].Items[0].Selected
すべてに適切な値が含まれていますが、コントローラー側では、オブジェクト pvm in メソッド:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(PersonEditViewModel pvm)
{
}
Interests コレクション (正しい ID と名前を持つ項目) にデータが含まれていますが、コレクションの各要素について、項目のサブコレクションは空です。
モデルを正しく選択するにはどうすればよいですか?