필자는 Phil Haack의 article리스트에 대한 바인딩을 읽었으므로 하나의 뷰에서 제대로 작동합니다. 하지만 마스터 레코드에서 그 일을 할 때 내가 갇혀있는 것. 나는이 개체에 대해 정말 간단한 양식을 가지고MVC 3 마스터/디테일 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를 호출 할 때하지만 그 작동 주위
update detail1 set masterID = null
update detail2 set masterID = null
update master set masterName = 'newname'
insert detail1 ...
insert detail2 ...
내가 작품을 가지고 있지만, 꽤 hackish 그리고 나는 현재 그렇게 키를 일치하고 있지 않다 (사이비 코드) SQL 프로파일 러에서 추적의 SQL을 발행 올바른 순서로 돌아 오는 모든 것에 의존합니다. 또한 업데이트 할 모든 필드를 포함시켜야합니다.
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에는 어떤 것이 있습니까? –
UpdateModel이 기본 컨트롤러 클래스에 있습니다. – DanielEli