SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2748 2008/08/22 13:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング