別のビューへのASP.Net MVCリダイレクト


89

コントローラから別のビューにリダイレクトすることは可能ですか?

たとえば、すべてのコントローラーは、特定の基準が満たされない場合に別のビューにリダイレクトするコンストラクターを持つカスタムコントローラーを継承します。それが理にかなっていると思います。

回答:


145

このRedirectToAction()メソッドを使用すると、リダイレクト先のアクションでビューを返すことができます。これを行う最も簡単な方法は次のとおりです。

return RedirectToAction("Index", model);

次に、Indexメソッドで、目的のビューを返します。


1
このようにした場合、コントローラーアクションから特定のビューを返す方法を教えてください。
ギャビン、

18
return View( "ViewName");
Craig Stuntz、2009

11
@Craig-戻りビューはリダイレクトを行わず、URLは以前と同じになります。したがって、 "/ edit / MyItem"にいる場合、View( "showitem")を返すと、 "/ edit /"のURLを持つ "showitem"ビューが表示されます。状況によってはこれでうまくいく場合もありますが、常にうまくいくとは限りません。
jeffreypriebe

5
@jeffrey、それは2つの別個のステップです。Johnが言ったように、最初のアクションでリダイレクトし、次に2番目のアクションでViewを返します。最初のアクションは、(とにかく)どちらのビューを使用するかを2番目のアクションに指示することはできません。
Craig Stuntz

@Craigは少し役立ちます。「アクション」と「ビュー」があります。2つの異なるものです。以下の私の答えが機能する理由:RedirectToAction-ビューの変更なし。これは.net MVC 101であると確信していますが、理解できません。ありがとう。
jeffreypriebe

19
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
これは同じコントローラアクションを使用します。RedirectToActionは別のアクションを呼び出します。これは私にとって最も簡単な解決策でした。
RaoulRubin 2012年

6

最も簡単な方法は、return Viewを使用することです。

return View("ViewName");

MVC C#/ .NETを使用している場合、「ViewName」の物理名はプロジェクトのViewName.cshtmlのようにする必要があります。


4

私はこれの条件が何であるか100%確信していませんが、私にとっては上記は直接機能しませんでした、それは近づいたと思いました。モデルでは「ObjectID」と呼ばれるため、ビューに「id」が必要だったからだと思います。

いろいろな情報を持ったモデルがありました。IDが必要です。

上記の前に、新しいSystem.Web.Routing.RouteValueDictionaryオブジェクトを作成し、必要なIDを追加しました。

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(注:私が作成しなかった問題のMVCプロジェクトなので、正しい「手間のかかる」ビットがどこにあるのかわかりません。)


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