Open棟梁Project - マイクロソフト系技術情報 Wiki
「ASP.NET MVCの用語」は
「ASP.NET MVCの利用方法」と比べて、
ASP.NET MVCの基本的なトピックをまとめています。
Modelには、
がある。
View = 画面表示のための処理。
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
この時、ブラウザから
http://server/applicationname/Products/Index/1
というURLでリクエストを送信した場合、
http://(Server FQDN名)/(Controller名)/(Action Method名)/(id 値)
ルート定義に従い、ページハンドラは
と判断し、
Products Controllerの Index Action Methodを呼び出し、Action Methodの引数として "1" を渡す。
Action Method名と id 値は省略可能で、Action Method名を省略すると、Index Action Methodが実行される。
マップの方法
Action Methodの結果として、Action Resultを返す。
詳細はAction Resultを参照。
Controller のAction Methodは、View の選択と指示として、
ActionResult クラスのオブジェクトを返す必要がある。
Action Methodで、
return View();
と、Viewを指定しないoverloadで呼び出すと、
/Views/コントローラ名/アクション名.cshtml
を呼び出す。
ActionResult? クラスには、以下の種類が存在する。
種類 | 概要・用途 | コード例(ヘルパー・メソッド) |
ViewResult? | 指定された全体 View の表示を指示する。 基本的には HTML.BeginForm の場合に使用する。 | return View("Result"); ("Result" は全体 View 名) |
PartialViewResult? | 指定された部分 View の表示を指示する。 基本的には Ajax.BeginForm の場合に使用する。 | return PartialView?("Result"); ("Result" は部分 View 名) |
RedirectResult? | 指定した URL にリダイレクトする場合に使用する。 | return Redirect("http://www.wings.msn.to/"); |
RedirectToActionResult? | 指定した Controller, Action にリダイレクトする場合に使用する。 | return RedirectToAction?("Index"); |
指定したルート名にリダイレクトする場合に使用する。 | return RedirectToRoute?("View Product", new { ProductName? = <商品名> }); | |
FilePathResult? | 指定されたパスの内容をファイルとして出力 | return File("C:\temp\file.zip", "application/zip", "file.zip"); |
FileContentResult? | byte配列の内容をファイルとして出力 | return File(bytes, "application/pdf"); |
FileStreamResult? | ストリームの内容をファイルとして出力 | return new FileStreamResult?(fileStream, "application/pdf"); |
ContentResult? | プレーン・テキストを出力(Ajax通信) | Return Content("こんにちは、世界!", "text/plain"); |
JsonResult? | 指定されたコンテンツをJSONとして出力(Ajax通信) | return Json(JsonConvert?.SerializeObject?(result), JsonRequestBehavior?.AllowGet?); |
JavaScriptResult? | 指定されたコンテンツをJavaScriptスクリプトとして出力 | return JavaScript(code); |
HttpUnauthorizedResult? | 承認の失敗時にHTTP応答コード「401 Unauthorized」をセット | - |
EmptyResult? | 何もしない | - |
Viewではなく、HTTP状態コードを返す。
項番 | ValuProvider? | 値取得元 |
1 | hildActionValueProvider? | 子アクション |
2 | FormValueProvider? | フォーム値 |
3 | RouteDataValueProvider? | Routeデータ |
4 | QueryStringValueProvider? | クエリ文字列 |
5 | HttpFileCollectionValueProvider? | HTTPファイルのコレクション |
ValueProvider?を使って、引数の名前と一致するキー名を探して、値をバインドする。
MVC 4 以降であれば、以下のように書ける。
public Task<ActionResult> Index()
public async Task<ActionResult> Index()
View には、
Webページのビューエンジンには以下の2つのものがある。
従来の ASP.NET と同様、
式やコードブロックを コード・ナゲット(<% ~ %>)で囲む記述形式。
View の拡張子も、従来の ASP.NET と同様、「*.aspx」で表される。
ASP.NET MVC 3 で登場したビューエンジン。
式やコードブロックの先頭に「@」を付与する記述形式で、
冗長なコード・ナゲット(<% ~ %>)が不要になる。
View の拡張子は、C# の場合は「*.cshtml」、VB の場合は「*.vbhtml」で表される。
通常のViewはコレ。
部分 View は、「Partial View」ともいわれ、以下の用途で使われる。
@Html.Partial("_XXXXPartial", model)
@RenderPage("~/View/Controller名/_XXXXPartial.cshtml", model)
@{ Html.RenderPartial("_XXXXPartial", model); }
[ChildActionOnly] public ActionResult Current() { ・・・ return PartialView("_XXXXPartial", partialViewModel); }
従来の ASP.NET では、ASP.NET Web コントロールを使用して、
ラベルやテキストボックスなどのコントロールを表示していたが、
ASP.NET MVC では、主に以下のような Viewヘルパーが使用できる。
項番 | HTMLタグ | Viewヘルパー |
1 | フォーム <form> | Html.BeginForm? または Ajax.BeginForm? |
2 | リンク <a> | Html.ActionLink? |
3 | テキストボックス <input type="text"> | Html.TextBox? または Html.TextBoxFor? |
4 | テキストエリア <textarea> | Html.TextArea? または Html.TextAreaFor? |
5 | パスワード <input type="password"> | Html.Password または Html.PasswordFor? |
6 | チェックボックス <input type="checkbox"> | Html.CheckBox? または Html.CheckBoxFor? |
7 | ドロップダウンリスト <select> | Html.DropDownList? または Html.DropDownListFor? |
8 | リストボックス <select> | Html.ListBox? または Html.ListBoxFor? |
9 | ラジオボタン <input type="radio"> | Html.RadioButton? または Html.RadioButtonFor? |
10 | 隠しフィールド <input type="hidden"> | Html.Hidden または Html.HiddenFor? |
Html.xxxx と Html.xxxxFor の2種類のHTMLヘルパーがある。
ただし、HTTP を経由しての双方向バインディングになるので、
処理方式的には、以下のような処理シーケンスになる。
ヘッダーやフッター、サイドメニューなどをアプリケーションで共通的に表示させたい場合、
マスターページを使用してレイアウトを共通化させることができる。
マスターページには、画面ごとに個別実装が必要な箇所を定義する。
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
メインのコンテンツ領域以外に、画面ごとに個別実装が必要な箇所を定義する場合、
RenderSection? を使用して「セクション」と呼ばれるサブのコンテンツ領域を定義する。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <!-- メインのコンテンツ領域を描画する場所を定義 --> @RenderBody() @Scripts.Render("~/bundles/jquery") <!-- セクション (サブのコンテンツ領域) を描画する場所を定義 --> @RenderSection("scripts", required: false) </body> </html>
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; // 使用するマスターページを指定 } @* メインのコンテンツ領域 *@ <h2>Index</h2> @* セクション (サブのコンテンツ領域) *@ @section scripts{ <script type="text/javascript"> ... </script> }
で囲む必要がある。
@{ Layout = "~/Views/Shared/_XXXXLayout.cshtml"; }
@{ Layout = "~/View/Controller名/_YYYYLayout.cshtml"; }
return View("YYYY, "_XXXXLayout");
return View("YYYY, "_YYYYLayout");
@{ Layout = "~/Views/Shared/_XXXXLayout.cshtml"; }
BeginForm?には以下の2つのものがある。
従来のASPなどでMVC方式を採用した場合と同じ、画面全体を再描画する仕組み。
クライアント・サイドのJavaScriptフレームワークとシームレスに連動して部分更新を実現する仕組み。
その性質上、Ajax通信の結果をページの一部に反映させるようなケースで利用することになるだろう。
ここでは、B層クラスではなく、
「B層クラスが返すViewに渡される
Entity, Bean, POCO的なクラス(ViewModel?)」
について説明する。
ControllerからViewにデータを渡すときに使用する入れ物的なモノ。
Action メソッド内で個別にチェックロジックを実装するか、
Model Meta Dataを使用したチェックが可能。
Tags: :ASP.NET, :ASP.NET MVC