ビューのみ作成するとどうなるか?
前回の記事では、画面に「Hello World」を表示しました。
その際、Visual StudioはIndex.vbhmtlを開いた状態で、プログラムを実行していました。
それでは、新しくIndex2.vbhtmlというビューのみを作成して、それを開いた状態で、プログラムを実行するとどうなるでしょうか?
1 2 3 4 5 |
@Code ViewData("Title") = "Index2" End Code <h2>Index2</h2> |
上図のようにエラーが発生してしまいます。
MVCモデルでは、ビューとコントローラーがセットになっており、ビューだけを作成しても画面は表示されません。
新しく作ったIndex2.vbhtmlを表示するには、HomeControllerにIndex2()という関数を作成する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Imports System.Web.Mvc Namespace Controllers Public Class HomeController Inherits Controller Function Index() As ActionResult Return View() End Function Function Index2() As ActionResult Return View() End Function End Class End Namespace |
HomeControllerにIndex2()という関数を作成したら、Index2.vbhtmlを開いた状態で、プログラムを実行させてみましょう。
今度は、想定通りの画面が表示されました。
すべてのタブを閉じた状態でプログラムを実行させるとどうなるか?
それでは、Visual Studioのタブをすべて閉じた状態で、プログラムを実行させるとどうなるでしょうか?
答えは、Index.vbhtmlの「Hello World」が表示されます。
これは、App_Startフォルダ配下にあるRouteConfig.vbで設定しています。
15行目のdefaultsの引数に、.controller="Home"、.action="Index"が指定されています。
これはデフォルトで、HomeControllerのIndex()関数を起動するという意味になります。
デフォルトの起動画面を変更したい場合は、defaultsの引数に起動画面にしたいコントローラーと関数を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Web Imports System.Web.Mvc Imports System.Web.Routing Public Module RouteConfig Public Sub RegisterRoutes(ByVal routes As RouteCollection) routes.IgnoreRoute("{resource}.axd/{*pathInfo}") routes.MapRoute( name:="Default", url:="{controller}/{action}/{id}", defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} ) End Sub End Module |
なお、プログラムを実行した時、常にデフォルトの起動画面を表示させたい場合は、ソリューションエクスプローラーのプロジェクト(今回の場合はTest1)にカーソルを合わせ、右クリックしてメニューの一番下にある「プロパティ」を選択します。
プロパティ画面の「Web」を選択し、「開始動作」の項目を確認します。
デフォルトでは、「現在のページ」が選択されていますが、これを「URL の開始」に変更し、「プロジェクトのURL」にあるURLをそのままコピーします。(ポート番号は環境によって変わります)
この設定をすることによって、例えば、Index2.vbhtmlを開いている状態でプログラムを実行しても、Index.vbhtmlの「Hello World」が表示されるようになります。