我有一個基本的MVC編輯頁面,我的一個LINQ到SQL對象稱爲AVC,它與MemberKommuns有一對多的關係,我想顯示用戶的所有MemberKommuns的列表,以便他們可以選擇他們想要的。MVC C#綁定一個LINQ到SQL對象與編輯頁面的一對多關係
的編輯頁面
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" />
POST版本的編輯頁面的縮短版get函數。剛打印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的其餘部分?
謝謝你的作品。我不明白你的區別是什麼,當我將AVC和List放入泛型時,不會像元素MyViewModel一樣? –
Imapler
不,它看起來不一樣。查看生成的標記,更具體地查看輸入字段的名稱。此外,您的控制器操作無法將Tuple作爲參數,因爲相應的屬性(Item1和Item2)沒有setter,這意味着默認模型聯編程序永遠無法設置它們。所以遠離這些元組並使用視圖模型。 –
啊我看到了,謝謝你的解釋 – Imapler