我老老实实地找了一个多小时才得到满意的答案。所以并不是我没有找到答案,只是不是我觉得完全正确的答案。这可能意味着我正在寻找不存在的银色子弹。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