URLルーティングルールの確認・変更
最初にURLルーティングルールの確認と変更を行います。既定の設定はURLルーティングの項目で解説した通りです。今回のサンプルではPubsController
クラスを利用するので、controllerにPubsを設定します。また、既定のルートとして、Pubsだけが入力された際には、Hello
メソッドを呼び出したいので、actionはHelloと入力します。
// MapRouteメソッドは新しいルーティングルールを // ルートコレクションに追加する // ここでは既定のルートとして // "http://xxx/Pubs/Hello"へとルーティングされる routes.MapRoute( // Route name(ルート名) "Default", // URL with parameters(URLとパラメータ名) "{controller}/{action}/{id}", // Parameter defaults(既定のパラメータ値) new { controller = "Pubs", action = "Hello", id = "" } );
これで、ルーティングの設定は完了です。
モデルの設定
ASP.NET MVCにおけるモデルは、従来のMVCのModelとは扱い方が少し異なります。ASP.NET MVCにおける一番の目的は、ビジネスロジックとUIの分離にあったのでPreview 3の段階でのModelはDBの定義・型の宣言・フィルタ設定がほとんどとなっています。
そして、ASP.NET MVCはASP.NET 3.5の上にあるフレームワークと解説しました。つまり、LINQが使えます。今回はModelにLINQ to SQLを配置します。LINQ to SQLに関する詳細はこちらの記事を参考にしてください。
ソリューション エクスプローラを展開し、Modelフォルダ上で[新しい項目の追加]を選択して、LINQ to SQLクラス-「Pubs.dbml」と名前を付けて追加します。サーバー エクスプローラからtitlesテーブルをドラッグしてデザイン画面へとドロップし、保存します。
以上で、テーブルの定義は完了です。
Controllerクラスの作成
ソリューション エクスプローラを展開し、「Controller」フォルダ上で[新しい項目の追加]を選択して、MVC Controller Class -「PubsController.cs」と名前を付けて追加します(図8)。
既定で作られるIndex
メソッドは削除します。
続いて、以下のコードを入力してください。ここでは、ViewDataの項目で解説した値の受け渡しと、Viewページへのルーティングを設定しています。
public ActionResult Hello() { // ViewDataにキーと値を格納 ViewData["Hello"] = "Hello, MVC Framework!"; // Titleキーを利用するとブラウザのタイトルとして表示される // この場合はTitlesが表示 ViewData["Title"] = "Titles"; // コントローラークラスのViewメソッドで、 // ルーティング先のViewPage名を設定する // この場合はPublisher.aspxページ return View("Publisher"); }
Viewページの設定
ソリューション エクスプローラを展開し、Viewフォルダ直下に「Pubs」フォルダを作成して、その上で[新しい項目の追加]を選択し、MVC View Content Page -「Publisher.aspx」と名前を付けて追加します(図9)。適用するマスタページは「Site.Master」です。
追加後のViewPageには何も記述されていないので、以下のコードを記述します。
<h1><%=ViewData["Hello"] %></h1> <p></p> <hr /> <p></p> <h2>Title Only</h2>
至ってシンプルですが、以上で完了です。埋め込みコードを使って、ViewData["Hello"]
に格納された値を表示します。実際に実行してみると図10のページが表示されます。
Titleに関する記述はViewPage上で記述していません。Controller
クラスでのみ値を格納していますが、実行時には赤枠で囲んだ部分に格納した値が表示されます。
Controllerクラスに処理を追加する
続いてLINQ to SQLを利用してコードを記述します。LINQ部分・ViewDataの扱いなどに特筆すべき点はありません。ポイントは、View
メソッドの部分です。
using SampleMVC.Models; <中略> // URLはhttp://xxx/Pubs/Titles public ActionResult Titles() { // ViewDataにキーと値を格納 ViewData["Hello"] = "Hello, MVC Framework!"; // Titleキーを利用するとブラウザのタイトルとして表示される // この場合はTitle Onlyが表示 ViewData["Title"] = "Title Only"; // titlesテーブルの中からroyaltyが10以上の項目を取得 var pubs = from p in pubsdatacontext.titles where p.royalty > 10 select p; // Viewについては後述第二パラメタにViewDataのModelを渡すことができる // Publisher.aspxページに、上記のLINQ結果をパラメタとしてルーティング return View("Publisher", pubs.ToList()); } // URLはhttp://xxx/Pubs/title public ActionResult title() { // titlesテーブルの中からroyaltyが10以上の項目を取得 var pubs = from p in pubsdatacontext.titles where p.royalty > 10 select p; // TitleView.aspxページに上記のLINQ結果をパラメタとしてルーティング return View("TitleView", pubs.ToList()); }
Titles
メソッドはView
メソッドでHello
メソッドと同じ「Publisher.aspx」にルーティングしています。パラメタとしてLINQ結果のジェネリック値を渡しています。また、title
メソッドはTitleViewという新しいルーティング先を指定します。