MemberKommuns と 1 対多の関係を持つ AVC と呼ばれる linq to sql オブジェクトの 1 つの基本的な mvc 編集ページがあり、ユーザーが必要なものを選択できるように、すべての MemberKommuns のリストを表示したいと考えています。
編集ページの get 関数
public ActionResult Edit(Guid id)
{
AVC avc = DatabaseManager.GetAVC(id); //get avc by id
List<MemberKommun> kommuns = DatabaseManager.GetMemberKommuns(); //get all MemberKommuns
//turn list into list of listItems for the drop down control
List<SelectListItem> listItems = new List<SelectListItem>();
for (int i = 0; i < kommuns.Count; i++)
{
listItems.Add(new SelectListItem()
{
Selected = kommuns[i].Id == avc.MemberKommunId,
Text = kommuns[i].Name,
Value = kommuns[i].Id.ToString(),
});
}
//send data to page as tuple
Tuple<AVC, List<SelectListItem>> data = new Tuple<AVC, List<SelectListItem>>(avc, listItems);
return View(data);
}
HTMLページの短縮版
@model Tuple<AVC, List<SelectListItem>>
@Html.HiddenFor(model => model.Item1.Id)
@Html.DropDownListFor(model => model.Item1.MemberKommunId, Model.Item2, new { size = 10 })
@Html.EditorFor(model => model.Item1.Name)
<input type="submit" value="Edit" />
編集ページの投稿バージョン。avc を json として出力するだけのダミー関数
[HttpPost]
public string Edit(AVC viewData)
{
return Helper.ToJson(viewData);
}
Json データ
{
"Id": "3ad40e34-c660-4226-87e0-fd7c2dca0e8d",
"MemberKommunId": "00000000-0000-0000-0000-000000000000",
"Name": null,
}
json データが示すように、id は正しくバインドされますが、残りのフィールドはデフォルト値になります。完全なコードでは、AVC にはさらにいくつかのフィールドがあり、それらはすべてデフォルト値を取得します。明確にするためにそれらを削除しました。
ポスト関数で MemberKommuns のリストを取得する必要はありません。後処理で AVC の残りの部分をバインダーに入力させるにはどうすればよいですか?