CodeZine(コードジン)

特集ページ一覧

もう一つのASP.NET 「ASP.NET MVC」を知る(前編)

ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/07/30 14:00
目次

URLルーティングルールの確認・変更

 最初にURLルーティングルールの確認と変更を行います。既定の設定はURLルーティングの項目で解説した通りです。今回のサンプルではPubsControllerクラスを利用するので、controllerにPubsを設定します。また、既定のルートとして、Pubsだけが入力された際には、Helloメソッドを呼び出したいので、actionはHelloと入力します。

Global.asax の一部
// 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)。

図8 新しい項目の追加ダイアログ
図8 新しい項目の追加ダイアログ

 既定で作られるIndexメソッドは削除します。

 続いて、以下のコードを入力してください。ここでは、ViewDataの項目で解説した値の受け渡しと、Viewページへのルーティングを設定しています。

PubsController.cs の一部
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」です。

図9 新しい項目の追加ダイアログ
図9 新しい項目の追加ダイアログ

 追加後のViewPageには何も記述されていないので、以下のコードを記述します。

Publisher.aspx の一部
<h1><%=ViewData["Hello"] %></h1>
<p></p>
<hr />
<p></p>
<h2>Title Only</h2>

 至ってシンプルですが、以上で完了です。埋め込みコードを使って、ViewData["Hello"]に格納された値を表示します。実際に実行してみると図10のページが表示されます。

図10 Helloメソッドを経由したPublisherページ
図10 Helloメソッドを経由したPublisherページ

 Titleに関する記述はViewPage上で記述していません。Controllerクラスでのみ値を格納していますが、実行時には赤枠で囲んだ部分に格納した値が表示されます。

Controllerクラスに処理を追加する

 続いてLINQ to SQLを利用してコードを記述します。LINQ部分・ViewDataの扱いなどに特筆すべき点はありません。ポイントは、Viewメソッドの部分です。

PubsController.cs の一部
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という新しいルーティング先を指定します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト ナオキ(ナオキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5