ASP.NET Core MVC(2)コントローラ
Controllerを認識する方法:
asp.Netcore mvcはURLによって要求中のコントローラを識別し、デフォルトURLルーティングロジックは
URLがlocalhost:59191/HelloWorldの場合、HelloWorldControllerクラスへのアクセスに対応するIndexメソッドを示します.URLがlocalhost:59191/HelloWorld/Welcomeの場合、HelloWorldControllerクラスへのアクセスに対応するWelcomeメソッドを示します.
Welcomeメソッドを次のように変更してみました.
URLがlocalhost:59191/HelloWorld/Welcomeなら?name=Money&numTimes=10の場合、Moneyは10回表示されます.
MVCのビュー
1 Viewsフォルダを右クリックし、追加>新規フォルダをHelloWorldと名付けます.2 HelloWorldフォルダを右クリックし、「ビュー」を追加し、Indexと名付けると、Indexが生成されます.cshtml、これはRazorビューファイルで、RazorはhtmlのようなC#で書くことができるファイルタイプで、データモデルとビューをバインドして使用するのに便利です.3 Index.cshtmlファイルの内容は以下のように変更されました.
4 HelloWorldControlのindexメソッドを次のように変更します.
5このとき、再度実行することができ、localhost:59191/HelloWorldのページがIndexであることがわかる.cshtmlの効果.コントローラ内のIndexメソッドには、1つの文return View()しかありません.ユーザーに返信するためにviewビュータイプを返す必要があることを示します.ここでView()には、どのビューファイルが空であるかは示されていない、asp.NetのMVCは、メソッド名に対応するデフォルトのビュー、すなわちHelloWorldディレクトリの下のindexを使用する.cshtmlファイル.
Views/Shared/_Layout.cshtml
このファイルは、すべてのビューファイルで使用されるテンプレートで、このファイルを変更することで、すべてのビュー共通の部分を変更できます.このファイルを開くと、次の行が表示されます.
ViewDataは辞書型の変数で、コントローラやビューで使用できます.この行は、各ページが独自に定義したViewDataのTitleという値を使用することを示しています.これにより、異なるページに基づいて異なる値が表示されます.ここからも、各ビューが先に実行され、共有されたビューが実行されることがわかります.
ViewData
コントローラのデータはどのようにビュー表示に渡されますか?ここで例を見てみましょう.HelloWorldのWelcomeを次のように変更します.2つのパラメータがあります.ViewDataメンバー変数によるMessageとNumTimesの転送
URLでlocalhost:59191/HelloWorld/Welcome?name=Money&numTimes=10の場合、nameとnumTimesはパラメータに自動的にマッピングされます.ここには大文字と小文字の区別がない.Welcomeビューを作成します.コードは次のとおりです.ViewDataでMessageとNumTimesを使用します.@その後、C#構文を使用することを示します.
asp.Netcore mvcはURLによって要求中のコントローラを識別し、デフォルトURLルーティングロジックは
/[Controller]/[ActionName]/[Parameters]
デフォルトURLのルーティングフォーマットがプロジェクト中のStartupである.csには定義があり、ActionNameはコントローラクラスのメソッドを表します.app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
URLがlocalhost:59191/HelloWorldの場合、HelloWorldControllerクラスへのアクセスに対応するIndexメソッドを示します.URLがlocalhost:59191/HelloWorld/Welcomeの場合、HelloWorldControllerクラスへのアクセスに対応するWelcomeメソッドを示します.
Welcomeメソッドを次のように変更してみました.
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
URLがlocalhost:59191/HelloWorld/Welcomeなら?name=Money&numTimes=10の場合、Moneyは10回表示されます.
MVCのビュー
1 Viewsフォルダを右クリックし、追加>新規フォルダをHelloWorldと名付けます.2 HelloWorldフォルダを右クリックし、「ビュー」を追加し、Indexと名付けると、Indexが生成されます.cshtml、これはRazorビューファイルで、RazorはhtmlのようなC#で書くことができるファイルタイプで、データモデルとビューをバインドして使用するのに便利です.3 Index.cshtmlファイルの内容は以下のように変更されました.
@{
ViewData["Title"] = "Index";
}
Index
Hello from our View Template!
4 HelloWorldControlのindexメソッドを次のように変更します.
public IActionResult Index()
{
return View();
}
5このとき、再度実行することができ、localhost:59191/HelloWorldのページがIndexであることがわかる.cshtmlの効果.コントローラ内のIndexメソッドには、1つの文return View()しかありません.ユーザーに返信するためにviewビュータイプを返す必要があることを示します.ここでView()には、どのビューファイルが空であるかは示されていない、asp.NetのMVCは、メソッド名に対応するデフォルトのビュー、すなわちHelloWorldディレクトリの下のindexを使用する.cshtmlファイル.
Views/Shared/_Layout.cshtml
このファイルは、すべてのビューファイルで使用されるテンプレートで、このファイルを変更することで、すべてのビュー共通の部分を変更できます.このファイルを開くと、次の行が表示されます.
@ViewData["Title"] - Movie App
ViewDataは辞書型の変数で、コントローラやビューで使用できます.この行は、各ページが独自に定義したViewDataのTitleという値を使用することを示しています.これにより、異なるページに基づいて異なる値が表示されます.ここからも、各ビューが先に実行され、共有されたビューが実行されることがわかります.
ViewData
コントローラのデータはどのようにビュー表示に渡されますか?ここで例を見てみましょう.HelloWorldのWelcomeを次のように変更します.2つのパラメータがあります.ViewDataメンバー変数によるMessageとNumTimesの転送
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
URLでlocalhost:59191/HelloWorld/Welcome?name=Money&numTimes=10の場合、nameとnumTimesはパラメータに自動的にマッピングされます.ここには大文字と小文字の区別がない.Welcomeビューを作成します.コードは次のとおりです.ViewDataでMessageとNumTimesを使用します.@その後、C#構文を使用することを示します.
@{
ViewData["Title"] = "Welcome";
}
Welcome
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
- @ViewData["Message"]
}