解説実例で学ぶASP.NETプログラミング第8回 ASP.NETで実現する「見栄えの良い」商品紹介ページ−前編 小田原 貴樹(うりゅう)2003/07/19 |
|
|
■ユーザーが左メニューを選択した場合の処理を実装する
さて、これであとは配置してあるイメージ・ボタンをクリックした際のイベントを記述すれば、ユーザーの操作を受け取ることができる。デザイナ画面上でイメージ・ボタンをダブルクリックし、追加されたClickイベントにコード・エディタで以下の1行を追加してほしい。
|
|
先頭のイメージ・ボタンのClickイベントに追加するコード | |
実際に追加するのは「Server.Transfer("PLIST.ASPX?ID=1")」の1行 |
ASP.NETのコードでページ間移動を行いたい場合には、Server.TransferメソッドかResponse.Redirectメソッドを利用するのが一般的だ。これらの間には、サーバの動作制御上いろいろな差異があるが、利用する上で意識する必要はそれほどないだろう。どちらかというとServer.Transferメソッドを利用することが推奨されているようだ。
メソッド内に移動先のURLを記述するのだが、ここに前回作成した一覧ページのファイル名を指定しただけでは、全商品の一覧が表示されてしまう。ユーザーが指定したカテゴリで一覧を反映させるために、「フォーム間の値渡し」を行う必要がある。
フォーム間の値渡しに関する詳細は後述するが、ここでは「クエリ文字列」を利用して値渡しを行っている。これはいわゆる「GETメソッド」を使用し、明示的にクエリ文字列をURLに付加して指定する方法で、ASP.NETの値渡しの中では最も単純な方法だろう。
値渡しにIDという変数を利用し、その値として各カテゴリの主キーであるID値を渡している。このID値はデータベース内の「酒カテゴリ」テーブルの中に格納されているものだが、ここでは深く考えず、上記コードにしたがって残りのボタンにも1から順に割り当ててもらえばよい。一番下のイメージ・ボタンまで記述が終わると、14までIDが割り振られているはずだ。これで、メニュー側の準備は完了した。
■全商品一覧ページをカテゴリ別一覧としても利用する
さて、これでページを移動し、その遷移先のフォームに値を渡すところまでは実装できた。あとは、その値によって全商品一覧ページに表示するデータを変更するようにコードを追加すればよい。
全商品一覧ページであるPLIST.ASPXをコード・エディタで開き、Page_Loadイベント内のコードを次のように変更する。
|
|
変更したPage_Loadイベントのコード |
3行目〜7行目に追加したコードが、左メニューから受け渡される値を取得している部分だ。ASP.NETでは「GETメソッド」で渡される値については、主にRequest.QueryStringを用いて取得する。
3行目では、そのRequest.QueryStringで取得したIDという値の中に、カテゴリのIDが入っているかどうかを判定している。これによってカテゴリ別商品一覧としてページが開かれているか、全商品一覧としてページが開かれているのかを判断している。
その判断に応じて、カテゴリ別商品として開かれているならば、4行目でセッション変数CIDの中に渡された値を格納し、全商品一覧として開かれているならば6行目で0を格納するようにしている。
セッション変数に関してはこの連載では初めて扱ったが、要は「サイトにアクセスしているユーザーごとに内容が異なる、共通の名前の変数」だと思っていただきたい。セッション変数はサイトが格納されているサーバのメモリ空間を利用するのが標準だ。セッション変数は宣言が不要で、サイト全体を通じて利用することが可能ため便利だが、その反面、多用すると混乱を引き起こしやすいので注意が必要となる。セッション変数に関しては次回で詳細に解説する予定だ。
12行目で呼び出しているGVIEWという前回作成した一覧表時用のメソッドには、もともと引数がなかった。しかし、そのままではカテゴリ別商品一覧が実現できないので、先ほど値を格納したセッション変数CIDを引数に指定できるようにGVIEWメソッドを修正しよう。
|
|
修正したGVIEWメソッド |
GVIEWメソッドで修正しなければならないのは、まず1行目の宣言部だ。先ほど新しく受け渡すことにしたカテゴリのIDをCIDという名前で受け取るようにする。
さらに、5行目〜7行目に、カテゴリ別商品一覧を実現するためのコードを追加している。受け取ったCIDが0、すなわち全商品一覧の指定になっているとき以外は、商品一覧用のデータが格納されているDataViewオブジェクト「PLVVIEW1」のRowFilterプロパティに値を設定している。
DataViewオブジェクトのRowFilterプロパティに設定する値は、SQL文おける「WHERE句」がそのまま利用できる。RowFilterプロパティを設定するたびにDataViewオブジェクトに格納されたデータにフィルタを適用することができ大変便利な機能だ。
「商品一覧ビュー」の「酒種ID」列に対して、受け取ったCIDの値をフィルタとして指定しているのが、6行目だ。これで、全商品が格納されていた「PLVVIEW1」にカテゴリIDの値によるフィルタがかかり、ユーザーが選んだカテゴリの商品だけが一覧ページ内に表示できるようになった。
PLIST.ASPX.VBのコードの中では、ほかにPGRID_PageIndexChangedイベントと、PGRID_SortCommandイベントの中で、GVIEWメソッドを呼び出しているので、これらでも同様に「Session("CID")」を引数として指定する必要がある。そこまで行えば修正は完了だ。これで全商品一覧ページだったPLIST.ASPXが、左フレーム・メニューでのユーザー選択に応じて、選ばれたカテゴリの商品一覧を生成できるようになった。
INDEX | ||
実例で学ぶASP.NETプログラミング | ||
第8回 ASP.NETで実現する「見栄えの良い」商品紹介ページ−前編 | ||
1.商品カテゴリ別一覧ページ作成の補足説明 | ||
2.ユーザーが左メニューを選択した場合の処理を実装する | ||
3.「フレーム間の制御」と「ページ間の値渡し」 | ||
4.商品紹介ページ上部のデザインを作成する | ||
5.一覧表ページと連結させて表示をテストする | ||
「解説 :実例で学ぶASP.NETプログラミング」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|