UpdateModel()은 다양한 입력 데이터 소스 (View, QueryString 값, 세션 변수/쿠키 등의 HTTP POST 데이터)를 지정한 명시 적 모델 객체에 바인드하려고하는 Controller helper 메소드입니다 매개 변수로. 기본적으로 모델 바인딩에만 사용됩니다.
보기 모델과 같이 강력한 형식의 모델로 작업에 대한 입력 매개 변수를 표현하면 UpdateModel()이 호출 될 때 장면 뒤에서 수행 된 모든 단계를 이미 완료 한 것입니다. DataContext에서 객체를 가져 와서 속성을 편집하면 SaveChanges()만이 업데이트를 데이터베이스 (이 경우 Save())로 다시 푸시하는 데 필요한 것입니다.
예 :
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {
var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
dinner.Description = incoming.Description;
dinnerRepository.Save();
return RedirectToAction("Details", new { id = incoming.DinnerID });
}
그러나, 강력한 형식의 모델 UpdateModel()를 사용하기위한 사용 사례가있다 : 당신은 그것의 가치를 강력한 형식의 모델에서 전달하고 싶은 경우 엔티티의 엔티티를 데이터베이스에서 직접 바꿉니다 (이름이 모두 동일하고 입력 된 경우). 이 경우 개체를 검색하여 UpdateModel()을 사용하면 해당 모델 바인딩 작업에서 비슷하게 이름이 지정된 형식화 된 속성을 강력한 형식의 개체에서 검색된 개체로 가져옵니다. 즉, 반사을 수행합니다.
귀하의 예와 같이 업데이트 할 항목을 지정하지 않고 모든 속성을 업데이트하고 강력한 형식의 모델과 데이터베이스 모델의 이름이 비슷한 속성이있는 경우 UpdateModel()을 사용하여 반사의.
예 :
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {
var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = incoming.DinnerID });
}
여기 (A FormCollection 개체를 사용하여 이상) 유일한 장점은 (incoming.DinnerID 같이)는 강력한 형식의 객체의 다른 모든 속성에 액세스 할 수있는 것이다.
결론 : 강력한 형식의 개체를 파생 된 개체로 변환하는 경우 UpdateModel()을 사용하는 것이 가장 쉽습니다. 그러나 파생 된 객체의 몇 가지 속성을 단순히 업데이트하는 경우에는 거의 필요하지 않습니다. 또한 Entity Framework (Linq to SQL과 같은 것 대신)를 사용하면 강력하게 형식화 된 객체와 파생 객체를 고유 한 메서드와 관련시킬 수 있으므로 이러한 모든 사항을 고려해야합니다.
Microsoft의 [ASP.NET MVC 소스] (http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en)를 사용하고 다음을 사용하십시오. 코드를 단계별로 살펴 보겠습니다. 그러면 그들이 정확히 어떤 마술을하는지 알 수 있습니다 : – mkchandler
양식 수집 시나리오 또는 다른 용도로만 작동합니까? – Krish