もう一つのASP.NET 「ASP.NET MVC」を知る(前編)
ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク
ダウンロード サンプルファイル (889.8 KB)
ViewPageの追記と追加
Controllerから2種類のページを指定していますが、最初にPublisherページの追記から行います。Helloメソッドと違い、TitlesメソッドはLINQ to SQLを利用したデータをViewDataに格納しました。このViewDataの値をViewPage上で利用するためにテーブルの型を紐付けます。
using SampleMVC.Models; namespace SampleMVC.Views.Pubs { public partial class Publisher : ViewPage<List<title>> { } }
これで、データの紐付けもできました。しかし、現在のPreview 3では紐付けた後に一度ビルドを行う必要があるので、忘れずにビルドを行ってください。
HtmlHelperクラス
ASP.NET MVCでは、Viewページを作る際に反復処理か、MVCに関する知識が求められます。また、サーバーコントロールも利用できないので、少しでもHTMLを簡単に書くために、HtmlHelperクラスが用意されています。ViewPage上で利用可能なので積極的に利用してください。以下にPreview 3のHtmlHelperクラスの主要メンバを記述します。
| メソッド | 概要 |
| ActionLink | 同一ルート内のハイパーリンクを生成 |
| DropDownList | ドロップダウンリストを生成 |
| Encode | エンコードされた文字列を生成 |
| ListBox | リストボックスを生成 |
| Password | パスワードテキストボックスを生成 |
| RouteLink | 異なるルートへのハイパーリンクを生成 |
| TextBox | テキストボックスを生成 |
それぞれパラメタを指定するだけで、HTMLタグを生成するので積極的に活用しましょう。
それでは、Publisherページ上でデータを表示するためのコードを記述します。
<h1><%=ViewData["Hello"] %></h1> <p></p> <hr /> <p></p> <% if (ViewData.Model != null) {%> <h2>Title Only</h2> <ul> <% foreach (var data in ViewData.Model) { %> <li> <%=Html.Encode(data.title1)%> </li> <% } %> </ul> <% } %>
初回実行時にPublisherページにアクセスしても、ViewData.Modelは空なのでデータは表示されません。しかし、Titlesメソッドからアクセスされた場合にはデータが表示されるようになります。また、埋め込みコードにより、ViewDataが持つデータの数だけforeach文で繰り返すことができます。foreach文はASP.NET MVCでは多用することになるので、この雰囲気はしっかりと掴みましょう。実行した画面はこちらです(図11)。
続いて「TitleView.aspx」というMVC View Content Pageを「Pubs」フォルダ上に追加します。Publisherページのコードビハインド同様、こちらもテーブルの紐付けを忘れずに行ってください。
<h1>Title View</h1> <p></p> <hr /> <p></p> <table> <thead> <tr> <td>Title ID:</td> <td>Title:</td> <td>Type:</td> <td>Price:</td> </tr> </thead> <% foreach (var data in ViewData.Model){ %> <tr> <td> <%=Html. Encode (data.title_id) %> </td> <td> <%=Html.Encode(data.title1) %> </td> <td> <%=Html.Encode(data.type) %> </td> <td> <%=Html.Encode(data.price) %> </td> </tr> <% } %> </table>
実行した画面はこちらです(図12)。
パラメタを持つViewPageの追記と追加
ASP.NET MVCのルーティングルールで、[action]以降にパラメタを記述している場合、既定でその名前のパラメタとして扱われます。今回は/[controller]/[action]/[id]というルーティングルールを登録しているので、id部分のパラメタをactionメソッドのパラメタとして利用できます。この時ルーティングルールで設定したパラメタ名と一致しない場合は、メソッドはパラメタを渡すことはできません。
ここでは、titlesメソッドで表示されたTitleViewページのTitle IDをハイパーリンクに変換し、詳細ページ(details.aspx)にルーティングを行います(図13~14)。
// URLはhttp://xxx/Pubs/info/id public ActionResult info(string id) { // titlesテーブルの中からtitle_idがパラメタのidと同等の項目を取得 var pubs = from t in pubsdatacontext.titles where t.title_id == id select t; // ブラウザのタイトルにパラメタの表示を行う ViewData["Title"] = "Information :"+id; // details.aspxページに上記のLINQ結果をパラメタとしてルーティング return View("details", pubs.ToList()); }
続いて「details.aspx」というMVC View Content Pageを「Pubs」フォルダ上に追加し、テーブルの紐付けを忘れずに行います。「Details.aspx」は次のように記述してください。
<h1><%=Html.Encode(ViewData["Title"]) %></h1> <p></p> <hr /> <p></p> <table> <% foreach(var Data in ViewData.Model){ %> <tr> <td>Title_ID</td> <td> <%=Html.Encode(Data.title_id) %> </td> </tr> <tr> <td>Title</td> <td> <%=Html.Encode(Data.title1) %> </td> </tr> <tr> <td>PubDate</td> <td> <%=Html.Encode(Data.pubdate) %> </td> </tr> <% } %> <tr> <td colspan="2"> <%-- ActionLinkは第一パラメタに表示テキストを、 第二パラメタにリンク先を記述します --%> <%=Html.ActionLink("戻る", "title") %> </td> </tr> </table>
以上で「details.aspx」は完成です。後は、TitleViewページのTitle IDをActionLinkに変換するだけです。
<td> <%=Html.ActionLink(data.title_id, "info/" + data.title_id)%> </td>
実行結果は図13~14になります。
まとめ
ASP.NET MVCフレームワークは従来のASP.NET開発とはまったく異なるので、ASP.NETでしか開発をしたことがない方にとっては、ASP.NET AJAXのように気軽に体感できない分、非常にハードルの高いフレームワークだと感じてしまうかと思います。しかし、キモの部分やコツさえ掴んでしまえば魅力的なフレームワークになるのは間違いありません。正式リリース前にどのような物か実際にチュートリアル通りにプロジェクトを作成し、予習しておくとよいでしょう。
今回は、前半としてデータを利用したMVCアプリケーション作成までを解説しました。次回は、MVCアプリケーションのテスト方法や、ページ編集やフィルタ作成といった踏み込んだMVCアプリケーションの作成について解説したいと思います。
なお、ASP.NET AJAXがBetaから正式版にかけてさまざまな変更点があったように、ASP.NET MVCフレームワークも変更点がある点には注意が必要です(現在はPreview 3)。
参考文献
この記事は参考になりましたか?
既に会員の方はを行ってください。
- 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト ナオキ(ナオキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア




