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


124

2つのコントローラーがあり、どちらもと呼ばれていAccountControllerます。そのうちの一つは、それを呼び出すことができますController Aしている、Areaと呼ばれAdmin、それを呼び出すことができますし、他のController Bいずれにもない、Area(私はそれがデフォルトでだという意味を推測しますArea?)。 Controller Bしているaction methodと呼ばれますLogin。私はこの行を持つaction methodin Controller Aを持っています

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

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


回答:


235

あなたは、供給することができますarearouteValuesのパラメータ。これを試して:

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

または

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

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


特定のエリアのビューから、どのエリアにもないコントローラのアクションに移動したい場合はどうなりますか?MVC5と同様に、右上のLogOffボタンはAccountControllerにあり、どの領域にもありません。そして、私は特定のエリアのビューからログオフしたいですか???
Awais Mahmood、2015

1
私の2番目の例はarea = ""、あなたのためにそれを行います。
Rory McCrossan 2015年

これはASP.NET Coreで動作しました。最新バージョンにアップグレードすると、RedirectToActionが機能しなくなり、空の文字列を含むarea = ""を使用して動作しました。
ジョナサンアルファロ2016

28

これを使って:

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

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

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

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

MSDN



2

これを使って:

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

1
コンセプトが好きです。私は常にRedirectToActionの文字列部分が嫌いで、入力したものに似ていると思っていましたが、これはc#を怒らせているようです。これは4.6.2より新しいフレームワークですか?
user3071434

@ user3071434いいえ、「using Microsoft.Web.Mvc」を追加して使用できます。文字列部分を回避し、間違ったアクションテキストが原因で実行時にエラーが発生するのを減らすことができます
Hiren Patel

0

それらを切り替えてみてください。

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

試してみましたが、うまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.