- PR -

UpdatePanelのTriggersを動的に追加する方法について

1
投稿者投稿内容
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 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);
}

どこかが間違っているんだろうと思いますが、何かご存知の方はいらっしゃいますか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 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にしてもよいです。)
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 2009-04-03 09:36
べるさん。

ありがとうございました。
上手く行きました。
1

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