2011-07-26 5 views
1

저는 MVC를 처음 접했고 많은 예제를 통해 살펴 보았습니다.MVC 왜 편집에서 가끔씩 UpdateModel이 사용 되는가?

일부 편집시 HttpPost의 경우 UpdateModel(entity)이라고합니다. 같은 다른 예에서

:

http://www.asp.net/mvc/tutorials/mvc-music-store-part-5

UpdateModel(entity)는 전혀 호출되지 않습니다.

MVCMusicStore에서 불필요하게 보이는이 기능을 호출하는 이유는 무엇입니까?

"컨트롤러의 현재 값 공급자의 값을 사용하여 지정된 모델 인스턴스를 업데이트합니다."

그러나 MVCMusicStore 예제에서 업데이트 된 값이 이미 게시되었음을 발견했습니다.

누군가 나에게 설명해 주시겠습니까? 당신이 당신의 컨트롤러의 행동에 다시 데이터를 게시 할 때, FormsCollection이 전달 될 것입니다 때문에 당신이 ASP.NET MVC의 최신 버전에

원래

는 제공된를 UpdateModel를 사용하는

+0

일반적으로 HttpPost Actions에서 호출되며 HttpGet (표시되지 않은) 액션에서는 호출되지 않으며 'http : // www.asp.net/mvc/tutorials/mvc-music-store-part-5'는 Get Action을 호출하고 이것이 UpdateModel() 호출이없는 이유입니다. –

답변

0

ModelBinding은 asp.net mvc (최신 버전은 3)의 최신 버전에서만 소개 된 것 같지 않습니다. 그것은 내가 말할 수있는 한 적어도 v-2에 존재했다. updatemodel을 호출 할 때 Modelbinding을 명시 적으로 호출합니다. 조치 메소드 매개 변수로 수신하면 Modelbinder가 내재적으로 호출됩니다. 우리는 DB에서 원래 개체를 가져오고 것처럼 UpdateModel 사용하여 업데이트 할 컨트롤러를 말할 때 편집 시나리오 updateModel에서
이 사용됩니다

public ActionResult Edit(int id) 
{ 
    var entity = db.GetEntity(id); 
    UpdateModel(entity); 
    db.SaveChanges(); 
} 
당신은 DB 엔티티를 가져 오는하지 않을 때

다른 시나리오는하지만 ModelBinder를 당신에게 양식에서 생성 된 개체를 제공합니다 필드 등등 당신은 db가 객체가 이미 있고 db 밖에서 수정되었다고 말하면 MusicStore 자습서 에서처럼 더 잘 동기화 할 수 있습니다.

1

는 이유가 없을 것 에 들어가면 UpdateModel(entity)으로 전화해야합니다.

그러나 최신 버전의 ASP.NET MVC에서는 ModelBinding이라는 개념이 도입되었으므로 액션 메서드에 전달할 .net 개체를 정의 할 수 있으며 모델 바인더는 "바인딩"을 처리합니다. 모델에 대한 값.

완전히 정직하기 때문에 AFAIK가 완전히 중복되어 있기 때문에 왜 그들이 UpdateModel() 메서드를 사용하지 않는지 모르겠습니다.

1

PATCH 의미에 대해 UpdateModel을 사용하십시오. RFC5789에서 :

패치 방법은 요청 개체에 기재된 사항의 ​​집합이 Request-URI에 의해 식별되는 자원에 적용되는 것을 요구한다.

즉, 데이터베이스와 같은 기존 자원을 수정하고 있음을 의미합니다.

PUT 의미에 대한 동작 메서드 매개 변수의 의미로 개체를 사용하십시오.

풋 패치 요청 차이는 서버가 요청-URI에 의해 식별되는 자원 을 수정 동봉 엔티티를 처리 방식으로 반사된다. PUT 요청에서 동봉 된 엔터티 은 원본 서버에 저장된 리소스의 수정 된 버전으로 간주되며 클라이언트는 저장된 버전을 으로 바꿀 것을 요청합니다.

실제로 요청에 모든 리소스 멤버에 대한 값이 포함되어 있으면 별다른 차이가 없습니다. 그러나 요청에 리소스 멤버의 하위 집합에 대한 값만 포함되어있는 경우 PATCH에 다른 멤버는 수정되지 않고 그대로 있으며 PUT은 기본값 (보통 NULL)으로 설정됩니다.

관련 문제