2013-04-10 62 views
5

我在使用區域的MVC4中有一個站點。在某些區域(可以稱之爲區),我有一個控制器(Controller)這個動作:MVC控制器。執行區域

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

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

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

,如果我做一個簡單的重定向到區/控制器/ OtherAction這樣這個偉大的工程

但我需要(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

這究竟是爲什麼以及如何解決呢?

回答

9

由於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"); 
//...