連載:ASP.NET MVC入門【バージョン3対応】第1回 Controller−View開発のキモを押さえる山田 祥寛(http://www.wings.msn.to/)2011/03/25 |
|
|
■コントローラ・クラスを作成する
プロジェクトの構造を理解できたら、ここからが本番だ。まずはModel−View−ControllerのController(コントローラ・クラス)を作成する。前回も述べたように、コントローラ・クラスとは、個々のリクエストに応じた処理を行うクラスのことである。
コントローラ・クラスを作成するには、ソリューション・エクスプローラから/Controllersフォルダを右クリックし、コンテキスト・メニューから[追加]−[コントローラー]を選択すればよい*3。
*3 ほかのファイルと同じく、[新しい項目の追加]ダイアログから追加しても構わない。その場合は、テンプレートとして「MVC 3 コントローラー クラス」を選ぶ。 |
図10 [コントローラーの追加]ダイアログ |
[コントローラーの追加]ダイアログが表示されるので、[コントローラー名]欄でコントローラ・クラスの名前を指定する。
コントローラ・クラスの名前は必ず「Controller」で終わらなければならない点に要注意だ。ASP.NET MVCでは、クラス名から接尾辞を取り除いた部分をコントローラ名であると認識する。つまり、ここでは「HelloController」としているので、コントローラ名は「Hello」と見なされる。
[Create、Update、Delete、およびDetailsの各シナリオのアクション・メソッドを追加する]のチェックは、登録/更新/一覧/削除/詳細などの機能を持ったメソッドのひな形を作成するかを指定する項目である。ひな形を作成する詳細についてはあらためて次回以降に解説するので、ここではチェックせずにおく。
[追加]ボタンをクリックすると、HelloController.vb/HelloController.csがコード・エディタで開く。エディタではすでにコントローラ・クラス(Controller派生クラス)の骨組みができているはずなので、リスト1のように必要なコードを追加してみよう(追記部分は太字)。
| ||
リスト1 HelloコントローラにIndexアクションを追加するコード(上:HelloController.cs、下:HelloController.vb) |
以下に、コントローラ・クラスのポイントをまとめておく。
(1)実際の処理を記述するのはアクション・メソッド
コントローラ・クラスには、1つ以上のアクション(アクション・メソッド)を含むことができる。アクション・メソッドとは、クライアントからのリクエストに対して具体的な処理を行うためのメソッドだ。
ASP.NET MVCでは、コントローラ・クラス配下のパブリック・メソッドを無条件にアクション・メソッドと見なすので*4、ことさらに命名規則を意識する必要はない。サンプルのコードであればIndexアクションを定義したという意味になる。
*4 逆に、アクション・メソッドとして扱ってほしくない場合には、メソッドをNonAction属性(System.Web.Mvc名前空間)でマークする必要がある。 |
(2)ビュー変数を設定する
コントローラ(アクション)の役割は多岐にわたっており、リクエスト情報の加工やモデルの呼び出しなど仕事はさまざまであるが、まずは最低限、ビューの生成に必要なパラメータ(ビュー変数)の設定だけを行っておく。ビュー変数とは、「コントローラとビューとの間で受け渡しできる変数」である、と考えておけばよい。
ビュー変数を設定するには、以下の構文で行える。
|
このように、ビュー変数はViewBagオブジェクトのプロパティとして設定できるわけだ。変数名は、Visual Basic/C#の命名規則に沿う限り、自由に命名して構わない。ここではMessageという名前で「こんにちは、世界!」という文字列を設定しているが、もちろん、同じ要領で複数のプロパティを設定することも可能であるし、値にも(文字列だけでなく)数値や日付、任意のオブジェクトを指定できる*5。
*5 ViewBagオブジェクトはバージョン3からの新機能。従来は、同じ目的で「ViewData["msg"] = "……";」のようなコードを記述していたが、ViewBagオブジェクトによって、わずかながらすっきりとした記述が可能になった。 |
なお、ViewBagオブジェクトを利用する際に1点だけ注意すべき点がある。というのも、ViewBagオブジェクトは.NET Framework 4のdynamicサポートを利用しているため(メンバは実行時に解決される)、プロパティの入力に当たってはIntelliSenseの恩恵を受けられ“ない”という点だ。注意してほしい。
(3)アクションの結果はActionResultオブジェクトで表す
ビュー変数を設定したら、アクション・メソッドの戻り値としてActionResultオブジェクト(正確には、その派生オブジェクト)を返すだけだ。ActionResultオブジェクトは、アクションの結果を表すためのオブジェクトで、ASP.NET MVCでは、ここで指定された内容に応じて出力を生成することになる。
ActionResultオブジェクトは、Controllerクラスで用意されたヘルパー・メソッドによって取得できる。リスト1で利用している「Viewメソッド」はその中でも特によく利用するメソッドで、アクションの結果を、ビュー・スクリプトを使って出力することを表している。
ちなみに、ActionResultオブジェクトを取得するためのヘルパー・メソッドには、以下のようなものが用意されている(*はASP.NET MVC 3で新たに追加されたもの)。
| ||||||||||||||||||||||||||||
表2 ActionResultオブジェクトを取得するためのヘルパー・メソッド | ||||||||||||||||||||||||||||
・model:ビューに渡すモデル ・type:コンテンツ・タイプ ・enc:文字エンコーディング |
さまざまなメソッドが用意されているが、(もちろん)いまここですべてを覚え込む必要はない。まずは「こんなものがあるんだ」という程度に確認いただければよいし、実際、当面利用するメソッドもせいぜいView、Redirect、Content程度であると考えておけばよいだろう。詳細は、拙稿「ActionResultオブジェクトでアクション操作も自由自在」も参照いただきたい。
INDEX | ||
ASP.NET MVC入門【バージョン3対応】 | ||
第1回 Controller−View開発のキモを押さえる | ||
1.ASP.NET MVC 3を利用するための準備/Hello, Worldアプリを作成 | ||
2.コントローラ・クラスを作成する | ||
3.ビューを作成する/サンプルの実行/まとめ | ||
「ASP.NET MVC入門【バージョン3対応】」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|