我在MVC4中有一个使用区域的网站。在某些区域(我们称之为区域),我有一个控制器(控制器),有这个动作:
public ActionResult Index()
{
return View();
}
public ActionResult OtherAction()
{
return View("Index");
}
如果我像这样简单地重定向到Area / Controller / OtherAction,那么这很有用:
return RedirectToAction("OtherAction", "Controller", new { area = "Area" });
但我需要(check here why)进行这样的重定向:
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));
在这种情况下,它不起作用。在最后一行之后,执行OtherAction方法,然后在此代码的最后一行中抛出此异常:
未找到视图“索引”或其主控或没有查看引擎 支持搜索的位置。以下地点是 搜寻:
〜/查看/控制器/ Index.aspx的
〜/查看/控制器/ Index.ascx
〜/查看/共享/ Index.aspx的
〜/查看/共享/ Index.ascx
〜/查看/控制器/ Index.cshtml
〜/查看/控制器/ Index.vbhtml
〜/查看/共享/ Index.cshtml
〜/查看/共享/ Index.vbhtml
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:10)
您得到异常,因为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");
//...