SHOEISHA iD

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

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

japan.internet.com翻訳記事

jQueryでWeb Formsアプリケーションのフィルタリングユーザーインターフェイスを作成する(後編)

折りたたみ/展開状態を記憶する機能を追加する

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

 シリーズ前編では、Queryを使って折りたたみ式のフィルタリングユーザーインターフェースを作成する方法を説明しました。今回は後編として、AJAXの機能を利用して、フィルタリングユーザーインターフェースの折りたたみ/展開状態を記憶する機能の追加方法を説明します。

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

はじめに

 前回の記事「jQueryでWeb Formsアプリケーションのフィルタリングユーザーインターフェースを作成する(前編)」では、ASP.NET Web FormsアプリケーションでjQueryを使って折りたたみ式のフィルタリングユーザーインターフェースを作成する方法を説明しました。ユーザーのブラウザにページがロードされるとき、フィルタリングインターフェースは折りたたまれた状態になっています。フィルタリングインターフェースのタイトルをクリックすると、インターフェースを折りたたみ状態と展開状態の間で切り替えることができます。展開状態では、DropDownList、TextBox、CheckBoxなどのフィルタリングコントロールを使用して、フィルタリングインターフェースの下のレポートに表示されている結果の絞り込みができます。

 前編で作成したフィルタリングインターフェースも動作することはしますが、インターフェースの折りたたみ/展開の状態を記憶しません。そのため、展開状態であっても、ポストバックの後や、ユーザーがいったんページを離れて再び戻ってきた場合には、フィルタリングインターフェースは折りたたみ状態に戻ってしまいます。幸い、ちょっとしたAJAXの機能を利用すれば、ユーザーセッションの間じゅう、フィルタリングユーザーインターフェースの折りたたみ/展開状態を記憶できます。本稿では、この機能を追加する方法を説明します。

 前編をまだ読んでいない読者は、後編にとりかかる前にぜひ前編をお読みください。

JavaScriptをプログラムで挿入する

 前編のサンプルでは、JavaScriptコードをASP.NETページのマークアップ部分に直接記述していました(Demo.aspx)。

<script type="text/javascript"> 
   $(document).ready(function() { 
      $('#filterUI').hide(); 

      $('#filterUItitle').click(function() { 
         $('#filterUI').slideToggle(400); 
         $('#filterUItitle').toggleClass('expandIcon'); 
         $('#filterUItitle').toggleClass('collapseIcon'); 
      }); 
   }); 
</script> 

 このスクリプトは、Webページがブラウザにロードされるたびに、それがページへの初めての訪問であるかポストバックであるかに関係なく実行されます。documentreadyイベントハンドラの最初の行($('#filterUI').hide())では、フィルタリングユーザーインターフェースを非表示にしています。そのため、ページのロード時にもポストバック後にもインターフェースが折りたたまれます。

 ページロード間でフィルタリングユーザーインターフェースの折りたたみ/展開状態を維持するには、次の2点を行う必要があります。

  1. 何らかの方法により、ユーザーごとの折りたたみ/展開状態を記憶する
  2. 上記1に基づいて、ページのロード時にフィルタリングユーザーインターフェースの表示/非表示を設定する

 1を実装する方法はひとまず置いておき、先に2に着目します。フィルタリングインターフェースの表示/非表示を設定するには、適切なJavaScriptをプログラムで挿入する必要があります。フィルタリングインターフェースを非表示にする(折りたたむ)ときは$('#filterUI').hide()、表示する(展開する)ときは$('#filterUI').show()を挿入しなければなりません。

 ASP.NETのClientScriptManagerクラスを使用すると、プログラムによってJavaScriptコードをページに挿入できます。このクラスにはPage.ClientScriptオブジェクトを介してアクセスでき、このクラスのRegisterClientScriptBlockメソッドやRegisterStartupScriptメソッドを使用して、適切なスクリプトを含むdocumentreadyイベントハンドラを挿入できます(本稿では、サーバーサイドのコードからクライアントサイドのスクリプトをASP.NETページに追加する際の問題については取り上げません。その詳細については、Xun Ding氏の記事「JavaScript With ASP.NET 2.0 Pages」を参照ください)。

 本稿のダウンロード可能なサンプルプロジェクトには、BasePageというカスタムのベースページクラスが含まれています。カスタムのベースページクラスを作成し、これをすべてのページの基本として使うようにすると、共通の機能をすべてのASP.NETページに反映させるときに便利です。ベースページクラスの使用方法と利点については、記事「Using a Custom Base Class for your ASP.NET Pages' Code-Behind Classes」を参照ください。

 本稿のサンプルのBasePageクラスには、jQUeryDocumentReadyStatementsという文字列リストのプロパティがあります。BasePageクラスでは、OnPreRenderメソッドもオーバーライドしています。このメソッドは、ページのライフサイクルにおいて、クライアントサイドのスクリプトをASP.NETページに追加するのに最もふさわしいタイミングです。オーバーライドしたメソッドでは、jQUeryDocumentReadyStatementsリストの中に文字列があるかどうかをチェックし、文字列がある場合は、指定されたステートメントを含むdocumentreadyイベントハンドラのスクリプトブロックを挿入します。オーバーライド後のOnPreRenderを次に示します。

Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs) 
   'Add jQuery document ready function, if needed 
   If jQueryDocumentReadyStatements.Count > 0 Then 
      Dim jQueryScript As String = "$(document).ready(function() {" 

      For Each stmt As String In jQueryDocumentReadyStatements 
         jQueryScript &= String.Concat(vbCrLf, stmt, vbCrLf) 
      Next 

      jQueryScript &= "});" 

      ClientScript.RegisterClientScriptBlock(Me.GetType, "jquery_DocumentReadyCode", jQueryScript, True) 
   End If 

   MyBase.OnPreRender(e) 
End Sub 

 サーバーサイドのコードからプログラムによってdocumentreadyイベントハンドラを作成するには、次の作業が必要です。

  1. System.Web.UI.Pageではなく)BasePageからASP.NETページを派生させる
  2. documentreadyイベントハンドラに入れるJavaScriptの各ステートメントを、次のようにjQUeryDocumentReadyStatementsコレクションに追加する
MyBase.jQueryDocumentReadyStatements.Add("$('#filterUI').hide();") 

 または、

MyBase.jQueryDocumentReadyStatements.Add("$('#filterUI').show();") 

 これにより、指定されたJavaScriptステートメントを含むdocument readyイベントハンドラがページに挿入されます。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
フィルタリングユーザーインターフェースを折りたたむか展開するかを判断する

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

Scott Mitchell(Scott Mitchell)

http://www.4guysfromrolla.com/ScottMitchell.shtml

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング