asp.net MVC中Action參數不只是一些基本類型,也支持實體參數。那麼從客戶端傳來的數據如何映射或轉換成實體對象呢?就是通過實體綁定類ModelBinder。此系列類在請求轉化為後台Controller的Action方法前,捕獲傳遞過來的數據,並對其進行解析和轉換,最終為實體類對象。
在系統啟動前,Global.asax.cs中的方法Application_Start方法調用下面代碼定義參數轉換規則。
//model binders ModelBinders.Binders.Add(typeof(BaseNopModel), new NopModelBinder());
NopModelBinder繼承DefaultModelBinder承擔系統的實體綁定類,但好像只是留一個接口,並沒有使用。主要是繼承父類的方法,稍有改變的地方是:方法BindModel添加了對NopModel的綁定支持。
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var model = base.BindModel(controllerContext, bindingContext); if (model is BaseNopModel) ((BaseNopModel) model).BindModel(controllerContext, bindingContext); return model; }
方法GetModelProperties添加了一個過濾方法,只是此方法尚未啟用。
類BaseNopModel是所有Model的基類,支持對自定義屬性的存儲。並且有一個綁定到解析器的方法BindModel,只是尚未發現有子類實現此方法。