2013-04-10 4 views
5

Ich habe eine Website in MVC4 mit Bereichen. In einigen Bereichen (läßt es Gebiet nennen), ich habe einen Controller (Controller) mit diesen Aktionen:MVC controller.Execute mit Bereichen

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

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

Dies funktioniert gut, wenn ich eine einfache Umleitung Area/Controller/OtherAction wie diese mache:

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

Aber ich brauche (check here why) eine Umleitung wie folgt zu machen:

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

Und in diesem Fall ist es nicht funktioniert. Nach der letzten Zeile wird die OtherAction Methode ausgeführt und dann in der letzten Zeile dieses Codes wirft sie diese Ausnahme:

die ‚Index‘ Ansicht oder seine Master nicht oder keine Aussicht Motor gefunden unterstützt die gesuchten Standorte . Folgende Standorte wurden gesucht:

~/Ansichten/Controller/Index.aspx

~/Ansichten/Controller/Index.ascx

~/Ansichten/Shared/Index.aspx

~/Ansichten/Shared/Index.ascx

~/Ansichten/Controller/Index.cshtml

~/Ansichten/Controller/Index.vbhtml

~/Ansichten/Shared/Index.cshtml

~/Ansichten/Shared/Index.vbhtml

Warum ist das passiert und wie kann ich es beheben?

Antwort

9

Sie erhalten die Ausnahme, da ASP.NET MVC versucht, Ihre Ansicht im Kontext "root" und nicht innerhalb des Gebietsansichtsverzeichnisses nachzuschlagen, da Sie den Bereich nicht ordnungsgemäß in routeData einrichten.

Die area Schlüssel Bedürfnisse in den DataTokens Sammlungen festgelegt werden und nicht in der Values

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