环境:
Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1
请求过程片段:
在请求的Action被调用之前,ControllerActionInvoker.InvokeAction()方法被调用,在这个方法里 面,有一个ReflectedActionDescriptor的实例会被构建,这个实例包含Action的描述信息。
接着,ControllerActionInvoker.GetParameterValues()方法被调用,通过传入的之前创建的 ReflectedActionDescriptor实例,获取Action参数列表(对应的ParameterDescriptor的实例分别被创建 ),进而遍历各参数,尝试获取参数的值,在遍历的循环里面, ControllerActionInvoker.GetParameterValue()方法被调用。
以下就是ControllerActionInvoker.GetParameterValue()方法的源代码:
protected virtual object GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) { // collect all of the necessary binding properties Type parameterType = parameterDescriptor.ParameterType; IModelBinder binder = GetModelBinder(parameterDescriptor); IDictionary<string, ValueProviderResult> valueProvider = controllerContext.Controller.ValueProvider; string parameterName = parameterDescriptor.BindingInfo.Prefix ?? parameterDescriptor.ParameterName; Predicate<string> propertyFilter = GetPropertyFilter (parameterDescriptor); // finally, call into the binder ModelBindingContext bindingContext = new ModelBindingContext() { FallbackToEmptyPrefix = (parameterDescriptor.BindingInfo.Prefix == null), // only fall back if prefix not specified ModelName = parameterName, ModelState = controllerContext.Controller.ViewData.ModelState, ModelType = parameterType, PropertyFilter = propertyFilter, ValueProvider = valueProvider }; object result = binder.BindModel(controllerContext, bindingContext); return result; }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 参数
, 方法
, Binder机制
Binder机制详解
,以便于您获取更多的相关知识。
时间: 2024-10-30 04:30:32