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