Exemplo n.º 1
0
 public ActionResult InvokeActionMethod(ControllerContext controllerContext)
 {
     //use reflection to get action result.
     //这边涉及到model bingding?
     //要给具体方法的参数赋值,这些值都是从request中获得。
     ActionResult result;
     object returnValue;
     GetActionReturnValue(controllerContext, out result, out returnValue);
     result = (returnValue as ActionResult) ?? new ContentResult { Content = returnValue.ToString() };
     return result;
 }
Exemplo n.º 2
0
 //下面这个是用vs重构的
 public void GetActionReturnValue(ControllerContext controllerContext, out ActionResult result, out object returnValue)
 {
     result = null;
     string actionName = controllerContext.RequestContext.RouteData.GetRequiredString("Action");
     Controller controllerInstance = controllerContext.Controller;
     MethodInfo methodInfo = controllerInstance.GetType().GetMethod(actionName);
     ParameterInfo[] parameters = methodInfo.GetParameters();
     List<object> parameterValues = new List<object>();
     foreach (ParameterInfo parameterInfo in parameters)
     {
         string parameterName = parameterInfo.Name;
         object parameterValueFromRequest = controllerContext.HttpContext.Request.QueryString[parameterName];
         parameterValues.Add(parameterValueFromRequest);
     }
     returnValue = methodInfo.Invoke(controllerInstance, parameterValues.ToArray());
 }
Exemplo n.º 3
0
 public abstract void ExecuteResult(ControllerContext controllerContext);
Exemplo n.º 4
0
 public void InvokeAction(ControllerContext controllerContext)
 {
     ActionResult actionResult = InvokeActionMethod(controllerContext);
     actionResult.ExecuteResult(controllerContext);
 }