好吧,我已閱讀Phil Haack的article關於綁定到列表,我在一個視圖上工作得很好。但是當我把它從主記錄中刪除時,我被卡住了。MVC 3 Master/Detail UpdateModel插入新的詳細記錄,而不是更新現有記錄
我有一個非常簡單的形式,此對象
public class Master
{
public int ID { get; set; }
public string MasterTitle { get; set; }
public virtual IList<Detail> Details { get; set; }
}
public class Detail
{
public int ID { get; set; }
public string DetailName { get; set; }
public virtual Master Master { get; set; }
}
形式收集回來與預期的前綴:
[0] ""
[1] "ID"
[2] "MasterTitle"
[3] "Details[0].ID"
[4] "Details[0]"
[5] "Details"
[6] "Details[0].DetailName"
[7] "Details[1].ID"
[8] "Details[1]"
[9] "Details[1].DetailName" string
而且Controller.UpdateModel(主)結合所有屬性正確。但是,當我打電話dbContext.SaveChanges從SQL事件探查器發出如下SQL(僞代碼)
update detail1 set masterID = null
update detail2 set masterID = null
update master set masterName = 'newname'
insert detail1 ...
insert detail2 ...
我有一個變通的作品,但它是相當hackish的,我目前不匹配了鍵,以便它依賴於以正確順序返回的所有內容。另外我必須包括所有我想更新的字段。
public ActionResult Edit(FormCollection collection)
{
try
{
using (var ctx = new PlayContext())
{
var id = int.Parse(collection["ID"]);
Master master = ctx.Master.Find(id);
UpdateModel(master, new [] {"MasterTitle"});
for (int i = 0; i < master.details.Count; i++)
{
UpdateModel(master.details[i], "Details[" + i + "]", new[] { "DetailName" });
}
ctx.SaveChanges();
return View(master);
}
}
catch (Exception e)
{
ModelState.AddModelError("", e);
}
return View();
}
我有一種感覺,UpdateModel是以某種方式刪除並重新添加子項。
有沒有其他人得到這個工作?當然,我可以把毛巾和自己的字段名稱解析出來,但我非常接近!
什麼是UpdateModel? – 2011-04-28 14:29:49