Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

MVC

ASP.NET MVCの用語」は
ASP.NET MVCの利用方法」と比べて、
ASP.NET MVCの基本的なトピックをまとめています。

M(Model)に実装される処理

Modelには、

がある。

V(View)に実装される処理

View = 画面表示のための処理。

C(Controller)に実装される処理

モジュールの作成順

  1. C(Controller)を作成
  2. V(View)を作成
  3. M(Model)を作成
  4. C(Controller)にAction Methodを追加し、C→M→Vと繋げる。

C(Controller)関連

URL ルーティング

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 Methodの結果として、Action Resultを返す。
詳細はAction Resultを参照。

Action Result

Controller のAction Methodは、View の選択と指示として、
ActionResult クラスのオブジェクトを返す必要がある。

Action Methodで、

return View();

と、Viewを指定しないoverloadで呼び出すと、

/Views/コントローラ名/アクション名.cshtml

を呼び出す。

ActionResult?の種類とヘルパー・メソッド

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?何もしない

HttpStatusCodeResult?

Viewではなく、HTTP状態コードを返す。

MVC モデルバインディング

ValuProvider?

項番ValuProvider?値取得元
hildActionValueProvider?子アクション
FormValueProvider?フォーム値
RouteDataValueProvider?Routeデータ
QueryStringValueProvider?クエリ文字列
HttpFileCollectionValueProvider?HTTPファイルのコレクション

ModelBinder?

ValueProvider?を使って、引数の名前と一致するキー名を探して、値をバインドする。

参考

非同期Controller

旧(AsyncController?を継承する。)

Task<ActionResult?>を返す。

MVC 4 以降であれば、以下のように書ける。

参考

V(View)関連

View には、

ビューエンジン

Webページのビューエンジンには以下の2つのものがある。

ASPX

従来の ASP.NET と同様、
式やコードブロックを コード・ナゲット(<% ~ %>)で囲む記述形式。
View の拡張子も、従来の ASP.NET と同様、「*.aspx」で表される。

Razor(主流)

ASP.NET MVC 3 で登場したビューエンジン。
式やコードブロックの先頭に「@」を付与する記述形式で、
冗長なコード・ナゲット(<% ~ %>)が不要になる。
View の拡張子は、C# の場合は「*.cshtml」、VB の場合は「*.vbhtml」で表される。

参考

全体 View

通常のViewはコレ。

部分 View

部分 View は、「Partial View」ともいわれ、以下の用途で使われる。

配置場所

使用方法(部分Viewだけ呼び出す)

使用方法(Action Methodと部分Viewの両方を呼び出す)

Viewヘルパー

従来の ASP.NET では、ASP.NET Web コントロールを使用して、
ラベルやテキストボックスなどのコントロールを表示していたが、

主な Viewヘルパー

ASP.NET MVC では、主に以下のような Viewヘルパーが使用できる。

2種類のHTMLヘルパー

Html.xxxx と Html.xxxxFor の2種類のHTMLヘルパーがある。

ただし、HTTP を経由しての双方向バインディングになるので、
処理方式的には、以下のような処理シーケンスになる。

マスターページ

ヘッダーやフッター、サイドメニューなどをアプリケーションで共通的に表示させたい場合、
マスターページを使用してレイアウトを共通化させることができる。
マスターページには、画面ごとに個別実装が必要な箇所を定義する。

ビューエンジン

配置場所と使用方法

マスターページへのセクションの定義

メインのコンテンツ領域以外に、画面ごとに個別実装が必要な箇所を定義する場合、
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>

マスターページの利用

で囲む必要がある。

マスターページのネスト

マスターページの選択

@{
    Layout = "~/Views/Shared/_XXXXLayout.cshtml";
}

BeginForm?

BeginForm?には以下の2つのものがある。

Html.BeginForm?の特徴

従来のASPなどでMVC方式を採用した場合と同じ、画面全体を再描画する仕組み。

Ajax.BeginForm?の特徴

クライアント・サイドのJavaScriptフレームワークとシームレスに連動して部分更新を実現する仕組み。

@model

M(Model)関連

ここでは、B層クラスではなく、

「B層クラスが返すViewに渡される
Entity, Bean, POCO的なクラス(ViewModel?)」

について説明する。

ViewBag?, ViewData?, TempData?

ControllerからViewにデータを渡すときに使用する入れ物的なモノ。

ViewBag?

ViewData?

TempData?

参考

Action メソッド内で個別にチェックロジックを実装するか、
Model Meta Dataを使用したチェックが可能。


Tags: :ASP.NET, :ASP.NET MVC


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS