RealPath:
WebPath:
2016/11/08 17:47 (JST) 更新
クイックスタート >>

Hello World 解説 (割と長い)

Contents

処理の流れ

軽く処理の流れを説明しますと、

(1) Home/About ページへのリクエスト
 ↓
(2) Home コントローラの About アクションが呼ばれる
 ↓
(3) Views/Home/About.cshtml の内容が表示される

という感じです。

いきなりコントローラとかアクションとか言われてもよく分からないと思うのでちょっと基本から説明していきます。

MVC について

ASP.NET MVC による Web アプリケーションは MVC の名が示すとおり、主に Model, View, Controller で内容が構成されています。
それぞれ、プロジェクト配下の Models, Views, Controllers フォルダの中に実体があります。

Model, View, Controller はそれぞれ以下のような役割を持ちます。

  • Model (モデル)
    • 一般的にはビジネスロジックといわれているが、実態はだいたいの場合データベース処理を担う。
  • View (ビュー)
    • 表示内容生成部分。いわゆる HTML 部分と思っておけば良い。
  • Controller (コントローラ)
    • ユーザからのリクエストを処理するもの。処理といっても複雑な処理はここではしない。 複雑な処理は Model に委譲し、その結果を表示する HTML (等)を生成するために View を用いる。


 
Web アプリケーションはユーザからのリクエストを受け取り、何らかの応答を返すものなわけですが、ざっくりいうと、コントローラがリクエストを受け取り、モデルが詳細な処理を行い、ビューが見た目を構築してユーザに返す、という流れをとります。図にすると以下のような感じです。(あくまでも概念なので図の描き方は割と人によりいろいろあります)

コントローラについて

ひとつひとつ掘り下げていきます。まず*コントローラ*について。

見てのとおり、コントローラは複数あります。
初期状態では AccountController, HomeController, ManageController という3つのコントローラが確認できます。
img--250--size

コントローラはクラスです。
コントローラクラスは複数の public メソッドを持ちます。これは一般的に*アクション*と呼ばれます。
例えば以下の Home コントローラは Index, About, Contact という3つのアクションを持ちます。
img--500--size

*コントローラ*が行う処理はこの*アクション*内で定義されます。

振り分けについて

さきほど「ユーザからのリクエストはコントローラが受け取る」と解説しましたが、
実際にはコントローラは複数あるため、*どのコントローラがリクエストを受け取るべきか*をどこかで決める必要があります。
また、コントローラは複数のアクションを持つため、*どのアクションが実行されるべきか*もどこかで決める必要があります。

これらは*ルート設定*により決定されます。

ルート設定は App_Start/RouteConfig.cs というファイルに定義されており、変更することもできるのですが、今のところは放っておきましょう。
デフォルトのルールはシンプルで、http://~/Abc/Xyz という URI がリクエストされた場合、Abc コントローラの Xyz アクションが呼ばれる、というものです。

http://~/Home/About という URI がリクエストされれば Home コントローラの About アクションが実行されます。
http://~/Account/Login という URI がリクエストされれば Account コントローラの Login アクションが実行されます。

モデルについて

実は今回の Home コントローラの About アクションではモデルが利用されていません。
なので一旦モデルの解説は飛ばします。

このあたりはまた別の機会に。

ビューについて

*ビュー*の実体はプロジェクト配下の Views フォルダ内にあり、これもまた見てのとおり複数あります。
img--200--size

が、どのビューが利用されるかというのはシンプルで、基本的に Views/<コントローラ名>/<アクション名>.cshtml が参照されるルールとなっています。(変更することもできます)

ビューの中身を見ていきます。
img--500--size
.cshtml 形式のビューファイルでは @ で始まるトークンにより変数埋め込み等ができるのですが、今回はそのあたりの解説は飛ばします。
とりあえず About.cshtml では h2, h3, p による3つのセクションが定義されていることが確認できます。

で、それによる表示結果。
img--400--size

Views/Home/About.cshtml の内容が表示されていることが確認できました。

ただ、今回のビューが定義しているのは Web サイトの見た目の内側部分であることがわかります。
外側部分の表示については今回のキモではないので別ページで解説するとして、いったん処理のまとめをします。

Hello World 振り返り

今回の Hello World は以下のような流れで処理が行われました。

(1) Home/About ページへのリクエスト (URI が http://~/Home/About)
 ↓
(2) Home コントローラの About アクションが呼ばれる (デフォルトのルート設定により、URI からコントローラとアクションが決定された)
 ↓
(3) Views/Home/About.cshtml の内容が表示される (Views/<コントローラ名>/<アクション名>.cshtml が呼ばれた)
 ※ただし、ここでいう表示内容は Web サイトの内側部分の表示を指す。