5

エリアを使用する MVC4 のサイトがあります。一部のエリア (エリアと呼びましょう) には、次のアクションを持つコントローラー (コントローラー) があります。

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

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

次のように Area/Controller/OtherAction への単純なリダイレクトを行うと、これはうまく機能します。

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

しかし、次のようなリダイレクトを行う必要があります (ここで理由を確認してください)。

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 メソッドが実行され、このコードの最後の行で次の例外がスローされます。

ビュー「インデックス」またはそのマスターが見つからないか、検索された場所をサポートするビュー エンジンがありません。次の場所が検索されました。

~/Views/Controller/Index.aspx

〜/Views/Controller/Index.ascx

~/Views/Shared/Index.aspx

~/ビュー/共有/Index.ascx

〜/Views/Controller/Index.cshtml

〜/Views/Controller/Index.vbhtml

~/ビュー/共有/Index.cshtml

〜/ビュー/共有/Index.vbhtml

なぜこれが起こっているのですか、どうすれば修正できますか?

4

1 に答える 1

12

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");
//...
于 2013-04-10T20:06:27.190 に答える