在前面的兩篇文章中,我們研究了Asp.Net Mvc Preview5的ViewEingine的改進,從本篇開始,我們開始研究Preview5中的新特性:ModelBinder.
首先我們來了解下什麼是ModelBinder特性,這有什麼用處,在以前的版本中,如果我們要在Action中獲取數據,一般有三種方式,一是通過Action的參數,但是由於某些原因,這兒只能獲取到簡單類型的參數,比如int,string等,第二種方式是通過Request來獲取,但是當數據較多的時候,這個方式實在太費勁了.三是使用BindingHelperExtensions中的擴展方法,但是這種方式還是不能滿足我們的要求.我們理想中的方式是:
如果能這樣寫,將直接能在參數中方便獲取傳入對象.會使得程序的結構更加合理.在新版中,框架引入ModelBinder來解決了這個問題,使得我們理想中的效果得以實現.
ModlBinder的作用就是建立一種html參數和對象的轉換關系,可以通過系統內置或者用戶添加的Binder來完成轉換過程,每當Action中含有參數的時候,系統會自動查詢url或者表單中是否含有相應的值,然後調用一定的ModelBinder對象來將參數轉化成傳入的值.
下面我們來分析下ModelBinder的工作過程.我們知道,Action的執行實際上實在ControllerActionInvoker中進行的,這個類中提供了一些方法,在執行的過程中,它首先找到Controller中Action對應的Method,然後判斷Method是否帶有參數,如果有參數,將使用特定的方式來對這些參數賦值.這部分具體的代碼我們弄出來瞧瞧: