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フレームワーク(2)


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

ASP.NET MVCにおけるAJAX対応

 Preview 4からASP.NET MVCでもAJAX対応がされました。ASP.NET AJAX(Extensions/Control Toolkit)とASP.NET MVCの相性はポストバックの非利用という点からも推測できるかと思いますが、相性はよくありません。しかし、AjaxHelperクラス、AjaxExtensionsクラスが用意されました。

AjaxHelperクラスメンバ
メソッド 概要
ActionLink Ajaxを利用した”文字列”を返すハイパーリンクを生成
Form Ajaxを利用したViewや文字列を返すフォームを生成

 HtmlHelperクラスに比べて、AjaxHelperクラスは利用できるメソッドが少なく、2種類しかありません。また、ActionLinkは文字列だけを、Formは解放が必要なViewや文字列しか利用できません。つまり、まだAjaxHelperクラスは発展途上であると言えます。

 なお、AjaxExtensionsクラスには現在、IsMvcAjaxRequestメソッドという拡張メソッドのみ存在します。このメソッドはAJAXによるリクエストかどうかを判別します。このメリットとして、AjaxHelperクラスによるAJAXリクエストを判定し、ページの中でAJAXを利用したユーザーコントロールの部分更新が可能になります。実際の活用サンプルは次のようになります。

Formメソッドを利用したサンプル

 実行した画面は図12~13のようになります。ユーザーコントロールは、テーブルタグに画像と文字を埋め込んだだけのあまり意味の無いサンプルなので、割愛させていただきます。詳しくはサンプルを参照ください。

図12 実行直後の画面
図12 実行直後の画面
図13 ボタンクリック後の画面
図13 ボタンクリック後の画面

 コントローラ側の処理はこちら。

HomeControllerクラスの一部
public ActionResult Index()
{
    ViewData["Title"] = "Home Page";
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    //非同期通信の判定
    if (Request.IsMvcAjaxRequest())
    {
        //VUC.ascxを返す
        return View("VUC");
    }
    //同期通信の場合はIndex.aspxを返す
    return View();
}

 フォーム側の処理はこちら。

About.aspxの一部

<%--Ajax.Form(Actionメソッド名 ,
          AjaxOptions { UpdateTargetId=Ajax動作の対象要素ID}) --%>
<% using (Ajax.Form("Index",new AjaxOptions { UpdateTargetId 
                                            = "UCPanel" })) {   %>
    <div id="UCPanel"></div>
    <%-- ボタンクリック時にIndexメソッドを経由する --%>
    <input type="submit" value="Button" />
<% } %>

ActionLinkメソッドと、IsMvcAjaxRequestメソッドを利用したサンプル

 実行した画面は図14~15のようになります。

図14 実行直後の画面
図14 実行直後の画面
図15 ハイパーリンクをクリックした後の画面
図15 ハイパーリンクをクリックした後の画面

 コントローラ側の処理はこちら。

HomeControllerクラスの一部
[OutputCache(Duration=5)]
public string WhatTime()
{
    return DateTime.Now.ToString();

}

 フォーム側の処理はこちら。

Index.aspxの一部

<%-- Ajax.ActionLink(リンクテキスト,Actionメソッド名 ,
          AjaxOptions { UpdateTargetId=Ajax動作の対象要素ID}) --%>
<%= Ajax.ActionLink("現在時刻表示", "WhatTime",
          new AjaxOptions {  UpdateTargetId = "TimeDate" })%>
<div>時間:<span id="TimeDate"></span></div>

 またAJAX専用クラスの他に、クライアントスクリプトとして、Microsoft AJAX Libraryの標準サポートが行われました(今後jQueryもサポート予定)。

まとめ

 前後編に渡って解説を行ってきましたが、コツさえつかめば、従来のASP.NETで手が届かなかった部分の開発などが、ASP.NET MVCを利用することで簡単に行えます。また、現在Preview 4までリリースされていますが、次のバージョンはBetaになるであろうと、Scott Guthrieさんはコメントしています。これからリリースにかけて新機能や名前空間の変更などがあるかと思いますが、正式リリースを楽しみに待ちましょう。

 なお、ASP.NET AJAXがBetaから正式版にかけてさまざまな変更があったように、ASP.NET MVCフレームワークにも変更点があることには、注意が必要です(現在はPreview 4)。

 次回から、リリースされたばかりのVisual Studio 2008 Service Pack1の追加機能について解説します。最初は、簡単にデータドリブンアプリケーションが構築できる「ASP.NET Dynamic Data Application」です。お楽しみに。

参考文献

  1. ScottGu's Blog(英語)
  2. Scott Hanselman's ComputerZen.com(英語)
  3. you've been HAACKED(英語)
  4. Stephen Walther on ASP.NET MVC
  5. Chica's Blog(日本語)
  6. ASP.NET Extentions 『ASP.NET Model-View-Controller Applications』(英語)
  7. どっとねっとふぁんBlog(日本語)
  8. 「オレがルールだ!」(日本語)

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

  • 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 Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2888 2008/09/01 18:49

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング