2011-07-26 26 views
1

我是MVC的新手,我一直在研究一堆示例。MVC爲什麼UpdateModel有時在Edit中使用,有時候不是

對於HttpPost在一些編輯他們稱UpdateModel(entity)

在如其它實例:

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

UpdateModel(entity)根本沒有被調用。

在MVCMusicStore中出現不需要的時候調用這個函數有什麼意義?

顯然它「使用來自控制器的當前值提供程序的值更新指定的模型實例」。

但是我從MVCMusicStore的例子中發現更新的值已經發布了?

難道有人請給我解釋一下嗎?

+0

通常在HttpPost Actions上調用並且不會調用HttpGet(未標記的)Actions和'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被隱含地調用。
在編輯場景中的UpdateModel當我們從數據庫中獲取原始實體,並告訴控制器,它使用的UpdateModel更新等作爲

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

其他的情況是,當你不取分貝的實體,而是ModelBinder的爲您提供了從形式創建的實體字段等等,並且你告訴你db對象已經存在,並且它已經在db外被修改了,你可以像MusicStore教程中那樣更好地同步它。

1

不應該有任何理由讓你使用的UpdateModel在ASP.NET MVC的新版本

它最初提供的,因爲當你發佈你的數據返回到控制器上的動作,FormsCollection將被傳遞然後打電話給UpdateModel(entity)將是必需的。

但是,在較新版本的ASP.NET MVC中,已經引入了ModelBinding的概念,它將允許您的操作定義要傳入您的操作方法的.net對象,並且模型聯編程序將負責「綁定」模型的值。

說實話,我不確定爲什麼他們不只是棄用UpdateModel()方法,因爲AFAIK它是完全多餘的。

1

使用UpdateModelPATCH語義。從RFC5789

補丁方法請求中的一組 請求實體所描述的改變被應用到由 的Request-URI所標識的資源。

這意味着您正在修改現有資源(例如從數據庫)。

使用作爲動作方法參數的對象爲PUT語義。

的PUT和PATCH請求之間的差異被反映在 方式服務器處理封閉實體來修改由Request-URI所標識的資源 。在PUT請求中,封閉實體 被認爲是存儲在原始服務器上的資源的修改版本,並且客戶端請求替換存儲的版本爲 。

實際上,如果請求包含所有資源成員的值,則沒有太大差別。但是如果請求僅包含資源成員子集的值,則在PATCH中,其他成員保持不變,並且在PUT中設置爲其默認值(通常爲NULL)。

相關問題