Asp.Net Mvc: Implement your custom ModelBinder

來源:互聯網
上載者:User

環境:

Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1

------------------------------------------------------------------------------

上文:Asp.Net Mvc: Model Binding 機制分析  中,我們簡單分析了Asp.Net Mvc中Model Binding的過程,非常粗糙,本文將探索如何?一個自己的ModelBinder,並進一步展示前文忽略的若干細節。

假設,我們現在有一個Book類,

現在我們要實現添加Book的功能,因此,建立一個BookController,並且加入一個Action:

建立相應的View:


其實,到這一步,當我們提交表單的時候,在Action裡面已經可以獲得Book自動綁定,這歸功於內建的DefaultModelBinder。但是,我們基於某種考慮,想要使用自己建立的ModelBinder。於是,我們接著建立一個SimpleModelBinder類,該類實現了IModelBinder介面(自訂的ModelBinder必須實現這個介面)。
IModelBinder只有一個方法BindModel(),這個方法接受兩個參數:ControllerContext, ModelBindingContext,因此,我們在實現這個方法的時候,便需要好好利用這兩個參數包含的資訊。

現在來看SimpleModelBinder的具體實現:


上面,我盡量避免寫入程式碼,因為我希望這個SimpleModelBinder具有一定的通用性。此外也避免Model欄位名稱更改的連鎖反應。這裡,我們通過bindingContext.ModelType來建立一個Model執行個體,通過TypeDescriptor來擷取Model的Property集合,通過bindingContext.ValueProvider來取得Request的表單資訊,最後返回一個Model執行個體。

這樣,我們的SimpleModelBinder就建立完了。那麼,如何讓它開始工作呢?

於是就引出一個問題:Asp.Net Mvc如何確定當前需要應用哪個ModelBinder?

答案是:按先後順序:(1)Action方法中Model的參數的Attribute,(2) ModelBinders.Binders字典,(3) Model類的Attribute,(4) DefaultModelBinder

也就是說,我們有(1)(2)(3)三種方法來告訴Asp.Net Mvc當前我們期望應用哪個ModelBinder到哪個Model。

(1) 在Action的Model參數上加Attribute:


(2) 將SimpleModelBinder添加到ModelBinders.Binders字典中:


(3) 在Book類定義時加上Attribute:


好啦,三個方法任由你選擇。

這裡,我們建立了一個很簡單的自訂的ModelBinder,但你是否知道它至少還缺失了一個很重要的功能,就是綁定時對Model的Property的過濾,因為一直以來我都把BindAttribute這個成員給忽視了。下篇,我們就來談談BindAttribute,並對SimpleModelBinder做稍稍的完善。

此外,DefaultModelBinder很強大了,什麼時候需要應用自訂的ModelBinder,則需要在實際項目中慢慢琢磨。 

Copyright

作者: Tristan G
本文著作權歸作者和部落格園共有,歡迎轉載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.