0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NET の DropDownList にて optgroup を使う

Posted at

はじめに

ページ主体の ASP.NET アプリケーションで動的に DropDownList を作る際に optgroup に対応したいケースがあり、調べたら複数の方法がありましたので参考先を含めて記します。

  1. DropDownList の Adapter を作る
  2. JavaScript でグループだけ追加する
  3. JavaScript で全部作る
  4. ASP.NET MVC を使う

DropDownList の Adapter を作る

正攻法のような気がしますが、DropDownList 一つに対応するには工数が大きい。グループが必要な DropDownList をたくさん持つ Web アプリをこれから作るのでしたらこれを採用するのがよいでしょう。

C# のコードですが、VB にも移植できます。ですが、移植しただけではエラーになりました。RenderListItem() メソッドの最後に以下のコードが必要です。

Page.ClientScript.RegisterForEventValidation(Me.Control.UniqueID, item.Value)

JavaScript でグループだけ追加する

ListItem の Attributes プロパティに data としてグループを追加して、JavaScript で書き換えるというものです。jQuery を使えば簡単ですし、下記にサンプルがあります。

jQuery に慣れていないと、どのような仕組みになっているか理解するのに頭をひねるかもしれません。またサーバー側のコードでコントロールを初期化して、クライアント側で更に加工しないと初期化が終らない気持ち悪さがあるかもしれません。

こちらもそのまま使ったら動きませんでした。jQuery のバージョンによるのかもしれません。$(this)[0] を2箇所 this にするなど、いくつか変更して使いました。

JavaScript で全部作る

JavaScript 側に(クライアント側に)データだけを渡し、クライアント側で DropDownList を作成、サーバー側は Request.Form で受け取るという方法もあります。そうなるともう ASP.NET を使う旨みがあまりありませんね。

ASP.NET MVC を使う

開発開始時に ASP.NET MVC を採用すれば、最近のバージョンでは対応しているようです(ページ主体の ASP を使うケースのほうがまれなのかもしれません)。

採用実績

以下の理由から二番目の方法(JavaScript でグループだけ追加する)を採用しました。

  • 既にページ主体の ASP で実装を開始している(運用も開始している)
  • jQuery を既に導入している
  • グループ化したい DropDownList が1つだけ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?