編集された可変長リストを取得するために Html.BeginCollectionItem ヘルパーを使用します。ネストされていないプロパティ (string Member.Info、int Member.MotherID など) では機能しますが、ネストされたプロパティはすべて null (Mother Member.Mother など) です...
メンバー クラス:
public class Member : Person
{
[Key]
public int MemberID { get; set; }
...
public string Info { get; set; }
public int MotherID { get; set; }
public virtual Mother Mother { get; set; }
}
ネストされたマザー クラス:
public class Mother : Person
{
[Key]
public int MotherID { get; set; }
public virtual ICollection<Member> Children { get; set; }
public Mother()
{
Children = new List<Member>();
}
}
コントローラーのスニペット:
[HttpPost]
public ActionResult GoSend(IEnumerable<Member> me) // Mother in 'me' is null
{...}
インデックス.cshtml:
@model IEnumerable<Directory_MVC.Models.Member>
...
@using (Html.BeginForm("GoSend", "Members", FormMethod.Post))
{
@foreach (var item in Model)
{
Html.RenderPartial("EditorRow", item);
}
}
EditorRow.cshtml:
@model Directory_MVC.Models.Member
...
@using (Html.BeginCollectionItem("me"))
{
@Html.HiddenFor(x => x.Info)
@Html.HiddenFor(x => x.MotherID)
@Html.HiddenFor(x => x.Mother)
@Html.HiddenFor(x => x.Mother.Email)
}
その壊れたマザー入力に対して生成された HTML は次のとおりです。
<input id="me_88c3c30f-3aa7-4729-9879-368f01073080__Mother" name="me[88c3c30f-3aa7-4729-9879-368f01073080].Mother" type="hidden" value="System.Data.Entity.DynamicProxies.Mother_5D771F511FE55BBA8F7C7D21A0054616D2EB9278EDCA1D59DFDCB1B68EA45920" />
MotherID 入力を機能させるために生成された HTML は次のとおりです。
<input data-val="true" data-val-number="The field MotherID must be a number." data-val-required="The MotherID field is required." id="me_88c3c30f-3aa7-4729-9879-368f01073080__MotherID" name="me[88c3c30f-3aa7-4729-9879-368f01073080].MotherID" type="hidden" value="1" />
私は何を間違っていますか?そのマザー オブジェクトをシリアル化し、Html.BeginCollectionItem を介してそのコントローラーで取得することさえ可能ですか?