SHOEISHA iD

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

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

ASP.NET MVC 2入門

ASP.NET MVC 2による非同期コントローラーとjQuery Template連携

ASP.NET MVC 2入門(後編)

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

ASP.NET MVC 2とjQuery Template

 Visual Studio 2010では、Web Form/MVC 2/Dynamic Data各プロジェクトテンプレートにjQueryが含まれています。マイクロソフト自身も、ASP.NETのクライアントサイドのAJAX実装はjQueryを推奨しています。これによりクライアントサイドの開発にjQueryを使用する機会も多くなるでしょう。

 また、『クライアントサイドの開発強化に注目!~VS2010+ASP.NET 4.0新機能(前編)~ 』で紹介したASP.NET AJAX Libraryですが、現在はASP.NET AJAX Control Toolkitに内包されています。しかし、Beta時代のものを残しているだけです。マイクロソフトもjQueryコミュニティと同じプロセスで技術提供を行う予定です。そのため、今後はjQuery Templateなど、jQueryプラグインなどの使用を推奨しています。

VS 2010とjQuery CodeSnippets

 VS 2010は、JavaScriptのデバッグ、インテリセンスの活用というコードエディタに関する機能が提供されていますが、jQueryを使う場合、さらに便利なスニペットがCodePlexで用意されています。

 jQuery Code Snippets for Visual Studio 2010は、ショートカットキー並びに、コードスニペット上にjQueryのひな型となるスニペットを131種類内包しているアドインです。利用方法は、コマンドエディタ上で、ショートカット入力し、Tabボタンを押すだけです(図4~図5)。

図4 jQuery CodeSnipetts例
図4 jQuery CodeSnipetts例
図5 スニペットの挿入結果~Tab押下時~
図5 スニペットの挿入結果~Tab押下時~

 一部のショートカット例を記載します。

ショートカット例
ショートカット 概要
jq <script>タグとjQueryの宣言を行うスニペットを挿入
jqclick jQuery宣言内で使用できるクリックイベントのテンプレート
jqmouseover jQuery宣言内で使用できるマウスオーバーイベントのテンプレート
jqmouseleave jQuery宣言内で使用できるマウスリーブイベントのテンプレート

 開発者である以上{}などの記号入力にも慣れているとは思いますが、上記ショートカット+Tabキーによる入力文字数の削減は確実に開発生産性の向上につながります。jQuery開発を行う際にはぜひインストールしてみてください。

 ショートカットの一覧はjQueryのサイトに記載されているので使用するものだけでも覚えて活用してみましょう。

 それでは実際にjQuery Templateを使用してみましょう。なお、本稿で取り扱うjQuery Templateは、Microsoftが開発を進めているTemplateを使用します(jQueryコアチームのTemplateではありませんのでご注意ください)。

jQuery Templateの使用

 まずは、jQuery Templateのダウンロードからです。jQuery Templateは現在githubで公開されています。

 jQuery Templateのページにアクセスし、[Download Source]をクリックして、zipまたはtar形式どちらかを選択し、ソース一式ダウンロードしてください。その後、プロジェクトのScriptsフォルダ内にjquery.tmpl.jsファイルを追加して、利用ページにスクリプトを宣言します。

jQuery Templateの使用

 jQuery TemplateはWPF/Silverlightによるテンプレートと同じ概念です。JSONのデータをjQuery Templateを使用して値をセットします(図6)。

図6 jQuery Templateサンプル実行例
図6 jQuery Templateサンプル実行例

 jQuery Templateは大枠で言うと3ブロックに分かれます。

jQuery Template指定例
<!-- (1)テンプレートを格納する要素 -->
<ul id="ulContainer"></ul>

<!-- (2)テンプレートを適用する要素 -->
<script id="liTemplate" type="text/html">
<li>
    名前 : {{= name }} 
</li>
</script>

<!-- (3)JSONデータと、jQuery Template構文 -->
<script type="text/javascript">
    var people = [
        { name: "ナオキ"},
        { name: "ふじこ"},
        { name: "たまき"}
    ];

    $("#liTemplate").tmpl(people).appendTo("#ulContainer");
</script>

 順に説明します。

 (1)テンプレートを適用した要素を格納する要素です。そのテンプレートに応じて必要な要素を宣言してください。1つしか要素がない場合は要素タグでもOK(今回の例では$(ul)など)。

 (2)テンプレートを適用するscriptタグ。typeはtext/htmlにします。値を表示するために{{=データ名}}という式を記載します。

 (3)peopleオブジェクトを用意(実際活用する場合はWebサービスなどで取得したJSONデータ)し、後はjQueryでコードを記述します。tmplメソッドはjQuery Templateが提供するメソッドで、パラメタとして渡されたオブジェクトを"id=liTemplate"の要素に対して値の文字列を追加します。そしてappendToメソッドで"id="ulTemplate"の要素に格納しています。

 さまざまな場面で利用の価値はありますが、恐らくWCF Data Servicesとの連動などが多くなる可能性があります。

WCF Data ServicesとjQuery Templateを利用する

 WCF Data Servicesは、AtomPubとJSONフォーマットがサポートされています。そのため、jQueryのgetJSONメソッドを利用することで、WCF Data ServicesからJSONによるデータ取得ができます(図7~8)。では、実際に利用してみましょう。手順は次のとおりです。

図7 ページアクセス直後
図7 ページアクセス直後
図8 JSONデータをjQuery Templateにより処理した結果の画面
図8 JSONデータをjQuery Templateにより処理した結果の画面
  • WCF Data Servicesのサービスにアクセス
  • jQueryのgetJSONメソッドを記述
  • jQuery Templateの記述を行う

 今回は今年実施されたTech・Ed North America 2010のサイトにある“TechEd 2010 OData Service”を利用します。

自前のWCF Data Servicesを利用する場合には?

 もし、自前のWCF Data Servicesを用意する場合は、下記要領で実施します。

  • 新たにWebプロジェクトを追加(WCF Data Servicesを利用できるなら何でもOK)
  • PubsデータベースのEDMを作成
  • WCF Data Servicesを作成
  • 元のプロジェクトにjQueryのgetJSONメソッドを記述
  • jQuery Templateの記述を行う

 こちらに関する詳しいコードはサンプル(GetWDS.aspx)に含まれているので、そちらを参照ください。

JSONオブジェクトを確認するには?

 jQuery Templateを利用する際に、サービスからどのようなJSONオブジェクトが取得されているか知ることが重要です。調べる方法はいくつかありますが、お勧めはFiddlerというツールです。

 Fiddler起動後に[Request Builder]タブをクリックします。図9のようにURLと、RequestHeadersに”Accept: application/json”と記述し、Executeボタンをクリックします。

図9 FiddlerのRequest Builder設定画面
図9 FiddlerのRequest Builder設定画面

 クリックすると、左のペインに実際リクエストした結果が表示されます。ダブルクリックした後、右下のペインにあるRawタブをクリックするとJSONの形式を確認できます(図10)。

図10 Fiddlerの解析画面
図10 Fiddlerの解析画面

 次にgetJSONメソッドを記述します。

jQueryのgetJSONメソッドとjQuery Templateの記述

 クライアントサイドから、WCF Data ServicesにJSONの応答を実行するgetJSONメソッドと、Data Servicesにアクセスした直後の値をjQuery Templateで表示させます。実際の記述は以下のとおりです。

  1. 新しくViewPageを追加(名前は何でもOK。サンプルではGetWDS.aspx)し、コントローラー側でルーティング設定を実施
  2. 各種スクリプトの宣言とgetJSONメソッドの記述など

 下記のように記述します。

getJSONメソッドとjQuery Templateの記述
<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.4.1.js") %>"></script>
<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery.tmpl.js") %>"></script>

<h3>Tech・Ed North America 2010のセッションタイトルとレベルを表示</h3>
<!-- (1)テンプレートを格納する要素 -->
<ul id="sessions">
</ul>

<!-- (2)テンプレートを適用する要素 -->
<script id="contacttmpl" type="text/html">
            <li><b>セッションタイトル</b>:{{= Title }}
                <ul>
                    <li><b>レベル</b>:{{= Level }}</li>
                </ul>
            </li>
</script>

<!-- (3)JSONデータと、jQuery Template構文 -->
<script type="text/javascript">
    function callWSD() {
        $(function () {
            // WCF Data Servicesにリクエストと応答時のテンプレート処理
            $.getJSON("http://odata.msteched.com/sessions.svc/Sessions?$select=Title,Level", function (response) {
                $("#contacttmpl").tmpl(response.d.results).appendTo("#sessions")
            });
        });
    }
</script>

<input type="button" value="サービス呼び出し" onclick="callWSD()" />

 順に解説します。

 (1)最初のサンプルと変わりありません。idでsessionsを指定しています。

 (2)jQuery Templateでは、if、else、eachステートメントをサポートしています。記述は{{ }}で宣言的に記述するだけです。今回は、取得したJSONデータ(Title、Levelの項目のみ格納)を<ul><li>タグで記述しています。

 (3)テンプレートを適用する"id=contacttmpl"に対してレスポンスとして取得したデータ(response.d.results)を渡します。その後、appendToメソッドで"id=sessions"の要素に格納しています。なお、この関数はボタンクリック時にcallWSDメソッドとして呼び出されます。

 $.getJSONメソッドですが、の第一パラメタにサービスのURLを、第二パラメタにコールバック関数を記述します。今回はURLにTechEd 2010 OData Serviceを、第二パラメタにjQuery Templateを記述します。

 実行結果は図7~8のようになります。

 ご覧のように、テンプレートはWCF Data Servicesとの相性が良いです(WCF+JSONでももちろんOK)。実務の中で組み合わせて活用してみてはいかがでしょうか。

まとめ

 ASP.NET MVC 2に関する新機能部分を前中後編に分けてお送りしました。ASP.NET自身も順当に進化していますが、MVCはさらに早い進化を遂げています。MVC 3は来年にはリリースされますので、MVCは逆行的だ!と言わずに進化している部分得意としている部分を認知し選択肢を広めてみてはいかがでしょうか。

 また、最後になりますが、Microsoftのエバンジェリスト井上章さんが作成されたMVC 2のサンプルアプリケーションEdtterがCodePlexにあります。MVC 2の基本的な機能は網羅されていますので、MVC 2に興味があるけど実際のサンプルが欲しい!という方は参考にしてみることをお勧めします。

参考文献

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
ASP.NET MVC 2入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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/5452 2010/10/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング