Agenda
前言
不知道大家有沒有點暈頭轉向XD,MVC的Model綁定機制真的蠻複雜,希望大家有跟上來
透過DefaultModelBinder的BindComplexElementalModel方法綁定複雜模型的值.
在BindProperty方法時填充子節點ModelMetadata的Model屬性,透過(DefaultModelBinder)再次綁定物件動作如下
ModelMetadata是簡單模型就會把值填充給此次ModelMetadata.ModelModelMetadata是複雜模型就建立一個物件後呼叫BindProperty直到找到最後的簡單模型.
在BindComplexElementalModel方法做幾個主要動作
BindProperties:透過MetaData取得屬性資訊並利用反射把值添加上去.OnModelUpdated:找尋Model上MetaData的ModelValidator進行屬性驗證,如果驗證失敗會把資料資訊加到ModelState.AddModelError(ModelStateDictionary)可在View搭配顯示error訊息
1 | internal void BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, object model) |
