- - PR -
UpdatePanelのTriggersを動的に追加する方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-04-02 17:11
VisualStudio2008
C# ASP.NET AJAX のような環境で開発を行っています。 UpdatePanelを配置して、これに対するTriggersを設定する事によって、UpdatePanelと 関係ない位置関係にあるコントロールから、UpdatePanelの更新を行う事が出来ます。 以下に記述したのは、UpdatePanel外にListBoxを配置して、このSelectedIndexChangedで UpdatePanelの更新を行うようにVisualStudioのデザイン画面からTrrigersにコレクションを 追加した結果生成されたASPXです。 <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True"> <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" /> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="ListBox1" EventName="SelectedIndexChanged" /> </Triggers> </asp:UpdatePanel> このTriggersの設定をロジックからやろうと思い上記の<Triggers></Triggers>を削除して から以下のようなコードを書いたんですが、UpdatePanelではなくページ全体が更新されて しまいます。 protected void OnPreRender(object sender, EventArgs e) { AsyncPostBackTrigger myAsyncPostBackTrigger = new AsyncPostBackTrigger(); myAsyncPostBackTrigger.ControlID = "ListBox1"; myAsyncPostBackTrigger.EventName = "SelectedIndexChanged"; UpdatePanel2.Triggers.Add(myAsyncPostBackTrigger); } どこかが間違っているんだろうと思いますが、何かご存知の方はいらっしゃいますか? |
|
投稿日時: 2009-04-03 00:19
http://msdn.microsoft.com/ja-jp/library/system.web.ui.asyncpostbacktrigger.aspx
ここに「AsyncPostBackTrigger コントロールのプログラムによる追加はサポートされていません」 と書いてあります。そして、 「ポストバック コントロールをプログラムによって登録するには、ScriptManager コントロールの RegisterAsyncPostBackControl メソッドを使用します」と書いてあります。 http://msdn.microsoft.com/ja-jp/library/system.web.ui.scriptmanager.registerasyncpostbackcontrol.aspx さらに、RegisterAsyncPostBackControlの説明の方には、 「UpdatePanel コントロールをプログラムで更新するには、Update メソッドを呼び出します。」 と書いてあります。 ということで、 ScriptManager1.RegisterAsyncPostBackControl(ListBox1); のようにして、SelectedIndexChangedイベントハンドラで UpdatePanel2.Update(); すればよいです。(Update();の代わりにUpdatePanel2のUpdateModeをAlwaysにしてもよいです。) |
|
投稿日時: 2009-04-03 09:36
べるさん。
ありがとうございました。 上手く行きました。 |
1