web-dev-qa-db-ja.com

別のコントローラーのアクションにリダイレクトする

2つのコントローラーがあり、両方ともAccountControllerと呼ばれます。それらの1つは、Controller Aと呼ぶことができ、Areaと呼ばれるAdminにあり、もう1つは、Controller Bと呼ぶことができ、AreaにはないArea?)。 Controller Bには、Loginというaction methodがあります。 action methodController Aがあり、この行があります

return RedirectToAction("LogIn", "Account");

問題は、404に存在しないactionにリダイレクトしようとするため、この行が実行されるときにController Aを取得することです。 action methodController Bを呼び出したいです。これは可能ですか?

108
Sachin Kainth

areaパラメーターでrouteValuesを指定できます。これを試して:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

または

return RedirectToAction("LogIn", "Account", new { area = "" });

あなたが目指しているエリアに応じて。

213
Rory McCrossan

これを使って:

return RedirectToAction("LogIn", "Account", new { area = "" });

これにより、「グローバル」エリアのLogInコントローラーのAccountアクションにリダイレクトされます。

このRedirectToActionオーバーロードを使用しています:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN

24
gdoron

これを使用できます:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
6
Muhammad Awais

これを使って:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
1
Hiren Patel