首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC RC1 模型繫結核心流程源碼解析:從 ControllerActionInvoker 到 ModelBinder

     編輯:關於ASP.NET

請求流程片段

  1. ControllerActionInvoker.InvokeAction() 建立 ReflectedActionDescriptor。
  2. GetParameterValues() 遍歷 ParameterDescriptor。
  3. GetParameterValue() 取得單一參數值,核心邏輯如下:

GetParameterValue 原始碼

protected virtual object GetParameterValue(ControllerContext cc, ParameterDescriptor pd) 
{
    Type pt = pd.ParameterType;
    IModelBinder binder = GetModelBinder(pd);
    IDictionary<string, ValueProviderResult> vp = cc.Controller.ValueProvider;
    string pn = pd.BindingInfo.Prefix ?? pd.ParameterName;
    Predicate<string> pf = GetPropertyFilter(pd);

    var mbc = new ModelBindingContext 
    {
        FallbackToEmptyPrefix = (pd.BindingInfo.Prefix == null),
        ModelName = pn,
        ModelState = cc.Controller.ViewData.ModelState,
        ModelType = pt,
        PropertyFilter = pf,
        ValueProvider = vp
    };
    return binder.BindModel(cc, mbc);
}

關鍵點

  • ValueProvider 整合 Form、QueryString、RouteData 等資料來源。
  • PropertyFilter 配合 BindAttribute 實現屬性級包含/排除。
  • ModelBindingContext 封裝繫結上下文,供自訂 IModelBinder 使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved