MVC控制器.执行区域

Die*_*ego 5 redirect asp.net-mvc-areas asp.net-mvc-4

我在MVC4中有一个使用区域的网站.在某些区域(让我们称之为区域),我有一个控制器(控制器)与此操作:

public ActionResult Index()
{
    return View();
}

public ActionResult OtherAction()
{
    return View("Index");
}
Run Code Online (Sandbox Code Playgroud)

如果我像这样简单地重定向到Area/Controller/OtherAction,这很有用:

return RedirectToAction("OtherAction", "Controller", new { area = "Area" });
Run Code Online (Sandbox Code Playgroud)

但我需要(检查这里为什么)进行这样的重定向:

RouteData routeData = new RouteData();
routeData.Values.Add("area", "Area");
routeData.Values.Add("controller", "Controller");
routeData.Values.Add("action", "OtherAction");
ControllerController controller = new ControllerController();
controller.Execute(new RequestContext(new HttpContextWrapper(HttpContext.ApplicationInstance.Context), routeData));
Run Code Online (Sandbox Code Playgroud)

在那种情况下,它不起作用.在最后一行之后,执行OtherAction方法,然后在此代码的最后一行中抛出此异常:

未找到视图"索引"或其主数据或视图引擎不支持搜索的位置.搜索了以下位置:

〜/查看/控制器/ Index.aspx的

〜/查看/控制器/ Index.ascx

〜/查看/共享/的Index.aspx

〜/查看/共享/ Index.ascx

〜/查看/控制器/ Index.cshtml

〜/查看/控制器/ Index.vbhtml

〜/查看/共享/ Index.cshtml

〜/查看/共享/ Index.vbhtml

为什么会发生这种情况,我该如何解决?

nem*_*esv 11

您得到异常,因为ASP.NET MVC尝试在"根"上下文中查找您的视图而不是在区域视图目录中查找,因为您没有正确设置区域routeData.

area键需要在设置DataTokens的集合,而不是在Values

RouteData routeData = new RouteData();
routeData.DataTokens.Add("area", "Area");
routeData.Values.Add("controller", "Controller");
routeData.Values.Add("action", "OtherAction");
//...
Run Code Online (Sandbox Code Playgroud)