MVC controller.Execute with areas

放肆的年华 提交于 2019-12-10 14:54:36

问题


I've a site in MVC4 using areas. In some area (lets call it Area), I have a controller (Controller) with this actions:

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

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

This works great if I make a simple redirect to Area/Controller/OtherAction like this:

return RedirectToAction("OtherAction", "Controller", new { area = "Area" });

But I need (check here why) to make a redirect like this:

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));

And in that case it doesn't work. After the last line, the OtherAction method is executed and then in the last line of this code it throws this exception:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:

~/Views/Controller/Index.aspx

~/Views/Controller/Index.ascx

~/Views/Shared/Index.aspx

~/Views/Shared/Index.ascx

~/Views/Controller/Index.cshtml

~/Views/Controller/Index.vbhtml

~/Views/Shared/Index.cshtml

~/Views/Shared/Index.vbhtml

Why is this happening and how can I fix it?


回答1:


You get the exception because ASP.NET MVC tries to look up your view in the "root" context and not inside the area view directory because you are not setting up the area correctly in the routeData.

The area key needs to be set in the DataTokens collections and not in the Values

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


来源:https://stackoverflow.com/questions/15935069/mvc-controller-execute-with-areas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!