- - PR -
フレームページのDropDownListの動きがおかしい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-31 10:23
いつもいい勉強させていただいております。
ヨンフンと申します。 フレームページのDropDownListサーバーコントロールのイベントが 起きない場合があって困っています。 現象発生の手順は下記のようです。 ------------------------------------ frame.htmlの呼び出し ↓ HeaderページのDropDownListは初期選択値として2を表示する。 ↓ DropDownListの選択値は3に変更する ↓ DropDownListののSelectedIndexChangedイベントにより Mainページのラベルに3が表示される ↓ DropDownListの選択値を初期選択値の2に変更する ↓ PostBackはするがSelectedIndexChangedイベントが起きない。 MainページにHeaderページが表示される。 ------------------------------------ ちなみに、javascriptでDropDownListの選択値を表示してみましたが、 正しく(ここでは2)表示されました。 しかし、上記のように初期選択値を選択した場合、 裏側(ViewState ?)では選択値の変更として認識されないみたいです。 どなたか教授お願いいたします。 テスト用のフレームページは下記のようです。 ちなみに、テスト環境はIIS5.0,Windows2000,VS.NET2003です。 -- frame.html -------------- <html><title></title> <head></head> <frameset rows="64,*" border="0" frameSpacing="0" frameBorder="0"> <frame name="header" src="Header.aspx" scrolling="no" noresize> <frame name="main" src="Main.aspx"> </frameset> </htm> --------------------------- ---Header.aspx----------- 'ページロードイベント Private Sub Page_Load If Page.IsPostBack = False Then DropDownList1.Items.Add(New ListItem("0")) DropDownList1.Items.Add(New ListItem("1")) DropDownList1.Items.Add(New ListItem("2")) ’初期選択値を2にする DropDownList1.SelectedIndex = 2 End If End Sub ’DropDownListのイベント Private Sub DropDownList1_SelectedIndexChanged Response.Redirect("Main.aspx?flag=" & _ DropDownList1.SelectedItem.Value) End Sub --------------------------- ---Main.aspx----------- Private Sub Page_Load Me.Label1.Text = Request.QueryString("flag") End Sub --------------------------- よろしくお願いいたいます。 | ||||
|
投稿日時: 2005-03-31 10:34
そもそもHeader.aspxがMain.aspxにRedirectしちゃまずいのでは?
| ||||
|
投稿日時: 2005-03-31 10:51
お返事ありがとうございます。
説明が足りませんでした。 DropDownList1.Attributes("document.Form1.target='main';") のようにTargetをMainページにしてあるので、 「HeaderページのDropDownListで選択した結果がMainページに表示される」 という目的は満たすだろうと思いました。 なんか、ほかの方法でもあるのでしょうか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-03-31 11:12
これはドロップダウンにどんな属性を追加しているのでしょうか? というかコンパイル通らないような。。。 | ||||
|
投稿日時: 2005-03-31 11:21
申し訳ございません。
タイピングミスでした。 DropDownList1.Attributes("onClick") = "document.Form1.target='main';" これによってTargetがMainページになります。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-03-31 11:49
この後に、Headerのソースを見てみると、OPTIONタグのSelected属性が2から3へ変化してません。 おそらく DropDownList1.Attributes("onClick") = "document.Form1.target='main';" これによって、Header.aspxのPostBackの動作がおかしくなっていると思います。 そもそも、これはASP.NETのPostBackの仕組みに逆らっているような。。。 こんなことができるとは知らなかったので、私も勉強になりましたが、 クライアントスクリプトで実装するように変えたほうがよろしいかと思います。 | ||||
|
投稿日時: 2005-03-31 12:26
なぜ AutoPostBack が設定されていない場合にも SelectedIndexChanged イベントが発生するかを考えるとわかるんじゃないでしょうか。
参照:ポストバック データの処理 | ||||
|
投稿日時: 2005-03-31 13:02
にしざき様がリンクしていただいたページは読ませていただきました。
勉強になりました。ありがとうございます。 引用: -------------------------------------------------------------------------- なぜ AutoPostBack が設定されていない場合にも SelectedIndexChanged イベントが発生するかを考えるとわかるんじゃないでしょうか。 -------------------------------------------------------------------------------- 上記のご指摘に対しては私の質問とどんな関係があるか理解しておりません。 リンク先ページを参考にしてカスタマコントロールを作れということでしょうか。 とりあえず、burton999様のご指摘通り、HTMLとJavaScriptで目的の処理を行うようにしようと思っております。 ありがとうございます。 でも、気持ちがすっきりしません。 |