フォワードとリダイレクト
コントローラーからビューを呼び出し、画面を遷移する方法には、フォワードとリダイレクトの2種類あります。
フォワードは、内部的に処理をする方法で、URLは変化しません。
リダイレクトは、他のURLにアクセスをやり直す方法で、URLが変化します。
ASP.NETのMVCモデルでは、フォワードはView()メソッド、リダイレクトはRedirect()メソッドやRedirectToAction()メソッドを使用します。
View()メソッドやRedirectToAction()メソッドの詳しい内容は、以下のマイクロソフト公式サイトを参照してください。
View()メソッドの使い方
View()メソッドは、Viewsフォルダ配下にあるビューを呼び出し、画面を遷移させます。
View()メソッドに引数を渡さないで呼び出すと、関数名に対応したビューが呼び出されます。
例えば、HomeControllerのIndex()の場合、Views/Homeフォルダ配下のIndex.vbhtmlが呼び出されます。
1 2 3 4 5 6 7 8 9 10 11 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult Return View() End Function End Class End Namespace |
また、View()メソッドは、呼び出したいビューを引数として渡すことができます。
View("Index2")とすると、Views/Homeフォルダ配下のIndex2.vbhtmlを呼び出すことができます。
View()メソッドは、同じコントローラーのビューのみを指定することができます。
ビュー名は、ダブルクォーテーション(")で囲む必要があります。
ViewData()を使ってビューに値を渡す
View()メソッドを使ってビューを呼び出した場合は、ViewData()またはViewBagを使って値を渡すことができます。
なお、ViewData()とViewBagは同じ領域を使用しているため、例えばViewData("Value")とViewBag.Valueは、同じ内容になります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult ViewData("Value") = "フォワード" Return View() End Function End Class End Namespace |
1 2 3 4 5 |
@Code ViewData("Title") = "Index" End Code <h2>@ViewData("Value")</h2> |
ビューはHTMLなので、Visual Basicのコードを使う場合は、コードの先頭に「@」を付ける必要があります。
プログラムを実行すると、ViewData("Value")の内容が画面に表示されます。
RedirectToAction()メソッドの使い方
RedirectToAction()メソッドを使うと、他のコントローラーの関数を呼び出すことができます。
以下の例は、HomeControllerのIndex()からWorkControllerのList()を呼び出しています。
1 2 3 4 5 6 7 8 9 10 11 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult Return RedirectToAction("List", "Work") End Function End Class End Namespace |
TempData()を使ってビューに値を渡す
RedirectToAction()メソッドを使ってビューを呼び出した場合は、TempData()を使って値を渡すことができます。
RedirectToAction()メソッドを使った場合、ViewData()を使って値を渡すことはできません。
1 2 3 4 5 6 7 8 9 10 11 12 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult TempData("Value") = "リダイレクト" Return RedirectToAction("List", "Work") End Function End Class End Namespace |
1 2 3 4 5 |
@Code ViewData("Title") = "List" End Code <h2>@TempData("Value")</h2> |
プログラムを実行すると、TempData("Value")の内容が表示されます。
また、URLも変わっていることが分かります。
ここで注意しないといけないのは、RedirectToAction()メソッドは該当のコントローラーを経由して、ビューを表示していることです。
例えば、WorkControllerのList()に、以下のようにViewData()を使って、値を渡すこともできます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Imports System.Web.Mvc Namespace Controllers Public Class WorkController Inherits Controller Function List() As ActionResult ViewData("Value") = "WorkController" Return View() End Function End Class End Namespace |
1 2 3 4 5 6 |
@Code ViewData("Title") = "List" End Code <h2>@TempData("Value")</h2> <h2>@ViewData("Value")</h2> |
プログラムを実行すると、HomeControllerのIndex()で渡したTempData("Value")と、WorkControllerのList()で渡したViewData("Value")の内容が表示されます。
Redirect()メソッドの使い方
Redirect()メソッドは、URLを指定して外部のサイトを表示することができます。
1 2 3 4 5 6 7 8 9 10 11 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult Return Redirect("https://docs.microsoft.com/") End Function End Class End Namespace |
プログラムを実行すると、外部のサイトに画面が遷移します。