2012-04-20 4 views
1

저는 1 년 또는 2 년 동안 .net MVC를 사용하고 있으며이 질문은 항상 내 책에서 답을 얻지 못했습니다. 내가 아주 간단한 예를ASP.NET MVC 게시 메서드에서 데이터베이스 개체를 업데이트하는 올바른 방법은 무엇입니까

PersonViewModel

public class PersonViewModel 
{ 
    public Person person { get; set; } //person is a db generated object 
    public SelectList jobtypes { get; set; } // drop down list for this view 
} 

PersonController을 보여 보자

public ActionResult Edit(int id) 
{ 
    PersonViewModel model = new PersonViewModel(); 
    model.person = db.GetPerson(id); //get a person from the db 
    model.jobtypes = GetThemJobTypes(); 
    return View(model); 
} 

이제 질문은 내가해야 할 다음 중 무엇입니까?

[HttpPost] 
public ActionResult Edit (PersonViewModel model) 
{ 
    Person person = db.GetPerson(model.person.personid); 

    person.firstname = model.person.firstname; 
    person.lastname = model.person.lastname; 
    person.jobtypeid = model.person.jobtypeid; 
    person.save(); 

    person.favoritetoy.name = model.person.favoritetoy.name; 
    person.favoritetoy.save(); 
} 

또는

그것은 updatemodel와 formcollection 방법처럼 보인다
[HttpPost] 
public ActionResult Edit (int id, FormCollection formValues) 
{ 
    Person person = db.GetPerson(id); 
    UpdateModel(person, "person"); 
    person.save() 

    UpdateModel(person.favoritetoy, "favoritetoy"); 
    person.favoritetoy.save() 
} 

웹 주위 사방 선택의 방법이다. 제가 약간 충돌하는 이유는 우리가 이미 원하는 필드가있는 ViewModel을 가지고 있다는 것입니다. 왜 formcollection을 다시 사용합니까? 많은 사람들이 게시물의 뷰 모델을 엄격하게 사용하도록 지적했지만, 그 방법을 사용하는 db 모델에 대한 좋은 예는 보지 못했습니다.

db 객체를 업데이트 할 예정인 방법은 무엇입니까?

답변

3

은 실제로는입니다. Ruby on Rails와는 달리 ASP.Net MVC 프레임 워크는 컨트롤러와 모델 상호 작용을위한 특정 패턴으로 연결하지 않습니다. 개인적으로는 처음에 더 가까운 것을 사용합니다. 런타임 오류보다 실수를하면 컴파일러 오류가 발생할 가능성이 더 높기 때문입니다. 그러나이 코드를 컨트롤러 메서드가 아닌 다른 위치로 이동하는 것이 좋습니다.하지만 빠르게 확장 될 수 있습니다.

+0

또한 모델을 변경하면 자동으로 업데이트되지 않는 코드에서 문자열 값을 사용하기 때문에 두 번째 방법을 사용하지 않을 것입니다. –

관련 문제