- PR -

フレームページのDropDownListの動きがおかしい

投稿者投稿内容
yosiyong
会議室デビュー日: 2005/03/31
投稿数: 6
投稿日時: 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
---------------------------

よろしくお願いいたいます。

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-03-31 10:34
そもそもHeader.aspxがMain.aspxにRedirectしちゃまずいのでは?
yosiyong
会議室デビュー日: 2005/03/31
投稿数: 6
投稿日時: 2005-03-31 10:51
お返事ありがとうございます。

説明が足りませんでした。
DropDownList1.Attributes("document.Form1.target='main';")
のようにTargetをMainページにしてあるので、
「HeaderページのDropDownListで選択した結果がMainページに表示される」
という目的は満たすだろうと思いました。
なんか、ほかの方法でもあるのでしょうか。
よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-03-31 11:12
引用:

DropDownList1.Attributes("document.Form1.target='main';")



これはドロップダウンにどんな属性を追加しているのでしょうか?
というかコンパイル通らないような。。。
yosiyong
会議室デビュー日: 2005/03/31
投稿数: 6
投稿日時: 2005-03-31 11:21
申し訳ございません。
タイピングミスでした。

DropDownList1.Attributes("onClick") = "document.Form1.target='main';"
これによってTargetがMainページになります。

よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-03-31 11:49
引用:

DropDownListののSelectedIndexChangedイベントにより
Mainページのラベルに3が表示される



この後に、Headerのソースを見てみると、OPTIONタグのSelected属性が2から3へ変化してません。
おそらく
DropDownList1.Attributes("onClick") = "document.Form1.target='main';"
これによって、Header.aspxのPostBackの動作がおかしくなっていると思います。
そもそも、これはASP.NETのPostBackの仕組みに逆らっているような。。。
こんなことができるとは知らなかったので、私も勉強になりましたが、
クライアントスクリプトで実装するように変えたほうがよろしいかと思います。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-03-31 12:26
なぜ AutoPostBack が設定されていない場合にも SelectedIndexChanged イベントが発生するかを考えるとわかるんじゃないでしょうか。
参照:ポストバック データの処理
yosiyong
会議室デビュー日: 2005/03/31
投稿数: 6
投稿日時: 2005-03-31 13:02
にしざき様がリンクしていただいたページは読ませていただきました。
勉強になりました。ありがとうございます。

引用: --------------------------------------------------------------------------
なぜ AutoPostBack が設定されていない場合にも SelectedIndexChanged イベントが発生するかを考えるとわかるんじゃないでしょうか。
--------------------------------------------------------------------------------
上記のご指摘に対しては私の質問とどんな関係があるか理解しておりません。
リンク先ページを参考にしてカスタマコントロールを作れということでしょうか。

とりあえず、burton999様のご指摘通り、HTMLとJavaScriptで目的の処理を行うようにしようと思っております。
ありがとうございます。

でも、気持ちがすっきりしません。

スキルアップ/キャリアアップ(JOB@IT)