程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Asp.Net Mvc Beta新特性之自動綁定(2)-深入探索篇

Asp.Net Mvc Beta新特性之自動綁定(2)-深入探索篇

編輯:關於ASP.NET

在上篇中介紹了自動綁定的基本用法,在本篇中,我們將深入了解自動綁定的工作原理.

自動綁定的確是讓人感到興奮的特性,然而,為了讓它可以在我們的項目中更好的工作,我們有必要深入了解如何更進一步細調該特性以及它是如何工作的.而本文正式即將揭開這個謎底.

為了更好的了解該特性,我們有必要到codeplex去下載一份asp.net mvc的源代碼並分析之,在本文寫作的時候,codeplex上已經放上了beta版的源碼,如果想進一步了解的朋友可以下載並對照本文分析.

在beta版中,新增了自動綁定這一特性,並對綁定特性做了一定的修改

新增BindAttribute:自動綁定特性設置

修改DefaultModelBinder:自動綁定的實現部分

修改ControllerActionInvoker:綁定的調用入口

新增ModelBinderContext,封裝綁定所需數據

新增BinderResult,封裝綁定結果

其他不大重要的修改略過

我們一步步來分析綁定的執行過程,首先肯定在ControllerActionInvoker中,看到GetParameterValue方法:

這兒便是對每個參數都嘗試調用ModelBinder來綁定參數,這兒的GetModelBinder方法和P5的一樣,在我們自定義ModelBinder的情況下可以進行自定義綁定,然而在自動綁定的時候獲取的則是DefaultModelBinder,然後在GetPropertyFilter方法中通過查閱BindAttribute來獲取關於綁定的設置.最後對數據進行綁定.

關鍵的,我們需要對DefaultModelBinder進行分析,然而在此之前,還有一個類也是需要我們仔細看看的,那就是BindAttribute,該特性是用來修飾參數的,它有4個重要的屬性:Include,Exclude,Prefix和一個方法:IsPropertyAllowed,分別用來設定:綁定的字段,不綁定的字段,參數前綴和判斷給定的字段是否設定運行綁定,且該方法會作為一個Predicate<string>委托封入ModelBinderContext傳入BindModel方法.

現在來討論使用默認綁定的情況,首先給出DefaultModelBinder的所有方法:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved