Har*_*eyz 8 c# asp.net-mvc asp.net-mvc-4
我正在构建一个预定的作业控制器 - 这些作业将调用一个Controller和一个捕获结果的Action.我宁愿在后端发生所有这些,也不要涉及http调用.
它有点类似于单元测试 - 例如:
var controller = new TestController();
var result = controller.Index("TestParameter") as ViewResult;
Run Code Online (Sandbox Code Playgroud)
问题在于此示例中控制器和操作不是动态的,是否有人知道如何初始化控制器并使用控制器名称和操作作为字符串参数调用操作?如 -
public ActionResult run(string controllerName, string actionName)
{
var controller = new Controller(controllerName);
var result = controller.action(actionName).("TestParameter") as ViewResult;
return Content(result);
}
Run Code Online (Sandbox Code Playgroud)
hai*_*770 14
使用ControllerFactory
with ActionDescriptor
以动态执行操作:
public ActionResult Run(string controllerName, string actionName)
{
// get the controller
var ctrlFactory = ControllerBuilder.Current.GetControllerFactory();
var ctrl = ctrlFactory.CreateController(this.Request.RequestContext, controllerName) as Controller;
var ctrlContext = new ControllerContext(this.Request.RequestContext, ctrl);
var ctrlDesc = new ReflectedControllerDescriptor(ctrl.GetType());
// get the action
var actionDesc = ctrlDesc.FindAction(ctrlContext, actionName);
// execute
var result = actionDesc.Execute(ctrlContext, new Dictionary<string, object>
{
{ "parameterName", "TestParameter" }
}) as ActionResult;
// return the other action result as the current action result
return result;
}
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN
归档时间: |
|
查看次数: |
5115 次 |
最近记录: |