我老老實實地找了一個多小時纔得到滿意的答案。所以並不是我沒有找到答案,只是不是我覺得完全正確的答案。這可能意味着我正在尋找不存在的銀色子彈。ASP MVC - 多對多的關係
在包含多對多關係的EF(代碼優先)模型的asp mvc中,如何將該關係綁定到複選框,然後將這些更改優雅地傳播到我的數據庫。
如果視圖只返回檢查過的複選框的值,那麼我不知道先前檢查過哪些值。我是否再次拉回原始對象然後比較兩者?它感覺骯髒,可能是因爲我習慣於讓EF魔術管理在對象上發生變化的屬性。
我已經有一個骯髒的版本,我不滿意。
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add insert logic here
Program p = _programRep.GetByID(id);
//manually update properties
//change to model binding later
EditPolicies(ref p, collection["SelectedPolicies"].ToString().Split(','));
_programRep.Save(p);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
private void EditPolicies(ref Program c, string[] selectedvals)
{
//I could do comparison logic here
int count = c.Policies.Count;
for (int i = 0; i < count; i++)
{
c.Policies.Remove(c.Policies.ElementAt(0));
}
for (int i = 0; i < selectedvals.Count(); i++)
{
Policy g = _policyRep.GetByID(int.Parse(selectedvals[i]));
c.Policies.Add(g);
}
}
真的沒有一種優雅的方式做你想要什麼。我通常做類似於你正在做的事情(刪除現有的,然後添加新的)。 – senfo 2011-02-18 18:39:21