2011-07-26 7 views
1

私はMVCを初めて使いました。MVCなぜ編集時にUpdateModelが使用されることがありますか、時にはそうではありません

HttpPostの編集では、UpdateModel(entity)と表示されます。以下のような他の例で

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

UpdateModel(entity)は全く呼び出されません。

MVCMusicStoreで不必要に見える場合、この関数を呼び出す点は何ですか?

明らかに、「コントローラの現在の値プロバイダの値を使用して、指定されたモデルインスタンスを更新します。

しかし、私はMVCMusicStoreの例から、更新された値が既に投稿されていることがわかりましたか?

私にこれを説明してもらえますか?

あなたはASP.NET MVC

の新しいバージョンでのUpdateModel使用するためにあなたが戻ってあなたのコントローラ上のアクションにあなたのデータを掲載する際、FormsCollectionが渡されるので、当初はそれが提供された理由はありません

+0

通常、HttpPostアクションで呼び出され、HttpGet(マークされていない)アクションでは呼び出されず、http:// www.asp.net/mvc/tutorials/mvc-music-store-part-5でGetアクションが呼び出され、そのため、 'UpdateModel()'呼び出しはありません。 –

答えて

0

ModelBindingは、最新バージョンのasp.net mvc(最新バージョンは3)にのみ導入されているとは思いません。私が知る限り、それは少なくともv-2にあった。 updatemodelを呼び出すと、Modelbindingを明示的に呼び出します。アクションメソッドのパラメータとして受け取った場合、Modelbinderは暗黙的に呼び出されます。編集シナリオUPDATEMODELで
は、あなたは、DBのエンティティを取得していないときに、他のシナリオがあるが、ModelBinderはあなたのフォームから作成したエンティティを与える

public ActionResult Edit(int id) 
{ 
    var entity = db.GetEntity(id); 
    UpdateModel(entity); 
    db.SaveChanges(); 
} 

のようなのUpdateModel使用して、我々はデシベルから元のエンティティを取得する際に使用し、それを更新するために、コントローラに伝えていますフィールドなどとあなたはオブジェクトがすでにそこにあり、dbの外で変更されていることをあなたに教えてください。MusicStoreのチュートリアルのように、よりよく同期してください。

1

にしてからUpdateModel(entity)への呼び出しが必要になります。

しかし、新しいバージョンのASP.NET MVCでは、アクションメソッドに渡される.netオブジェクトを定義するアクションを許可するModelBindingという概念が導入されました。モデルバインダーは、モデルへの値

AFAIKは完全に冗長であるため、彼らがなぜUpdateModel()メソッドを非推奨にしていないのか、完全に正直なところ私は分かりません。

1

PATCHセマンティクスにUpdateModelを使用してください。 RFC5789から:

PATCH方法は 要求エンティティに説明する変更のセットが のRequest-URIで識別されるリソースに適用されることを要求します。

これは、既存のリソース(データベースなど)を変更することを意味します。

アクションメソッドパラメータをPUTセマンティクスとしてオブジェクトを使用します。

PUTとPATCH要求との間の差は、サーバは、Request-URIによって識別されたリソース を変更する同封エンティティを処理 ように反映されています。 PUT要求では、同封されたエンティティ は、オリジンサーバ に保存されているリソースの変更バージョンであるとみなされ、クライアントは保存されたバージョンを に置き換えようとしています。

実際には、リクエストにすべてのリソースメンバーの値が含まれていても、それほど大きな違いはありません。しかし、要求にリソースメンバーのサブセットの値のみが含まれている場合、PATCHには他のメンバーは変更されずに残り、PUTはデフォルト値(通常はNULL)に設定されます。

関連する問題