社員技術ブログ

【ASP.NET】UpdatePanelのDatalistでResponse.Flushするには?

どうもこんにちはにっしーです。初の技術ブログとなります。

会社の近くに、ラーメン屋の「座銀」の新店舗ができました。

早速行ってみると普通においしかったのですがもちろんその話ではありません。

 

私は、業務でウェブアプリの開発をしており、

ASP.Net(C#)という言語環境ですので、

その関連の話です。当HPのブログの中ではわりと人を選ぶ記事となります。

 

さて内容に入る前に…

当HPのブログをあれこれご覧くださっていてココに来られた方

検索で直接来られた方

いろいろいらっしゃるでしょうが

まずはページ上部のタイトルをご覧あれ。

 

・(RegisterPostBackControlの事かな)

 

と思われた方、ここにはすでにご存じの内容しか書いてありません。

ブログ一覧へ戻るで問題ありません。

 

・(日本語で頼むよ

 

ここの内容は現在不必要な情報です。

間違いありません。

やはりブログ一覧へ戻るで問題ありません。

 

時間を無駄に頂くのも申し訳なかったんです…

さて

そんなこと言ってたらほとんどの人はこの先には行けない、検索で直接来られた方しか残ってない

かもしれませんが、ジャンルの性質上、読んでも時間の無駄なので仕方がありません。

では結論からまいりましょう。

 

まずは結論から

1.UpdatePanelでResponse.FlushするにはPostBackTriggerの設定が必要
  静的に配置するコントロールならTriggerタグを打って設定、でOK

今回はさらに・・

2.DataList内のコントロールは動的に配置されるので、PostBackTrigger設定も動的に行う
  ⇒OnItemCreatedイベントにてRegisterPostBackControl()関数を使用して設定

 

経緯:ちらつき対策でUpDatePanel導入したらFlushしなくなった

新たにページを作っていて

DataList内のボタンでResponse.Flushが走るのですが、

ちらつきをなくす為に

DataListをUpdatePanelで囲ったら、Flushしなくなってしまいました

※UpdatePanelというのは非常に簡単に実装でき便利なのですが、

 しくみを知らないと結局このようなトラブル時に大変困りますね。

 

UpdatePanelでのResponse.Flush

まず、こんな情報に行きつきました。

Response.Write and UpdatePanel_stackoverflow.com

 

UpdatePanelのような非同期ポストバックではResponse.Writeできないよ、と。(Flushも一緒)

そういう時はContentsTemplateタグ内にTriggerタグを打ってPostBackTrigger設定しなさいよ、と。

 

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Button ID="btn1" runat="server" onclick="btn1_click"/>
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="btn1" />
    </Triggers>
</asp:UpdatePanel>

 

しかし私は

UpdatePanelの中のDatalistに配置したボタンでResponse.Flushがしたいのです。

DataListの内容は動的に作成されるため、

あらかじめタグを打つ形での設定ができないのです。。

 

DataList内コントロールへのTrigger設定

やはり設定も動的にするんだろな。

C#側でそういう関数ないかな。

ありました。

PostBackTriggerとしてコントロールを登録できる関数

ScriptManager.RegisterPostBackControl(Control) メソッド

 

こういうのがあるんですね。

DataListのOnItemCreatedイベントで

ScriptManager1.RegisterPostBackControl(ctr);

という形で、トリガの登録を動的に行えます。

 

以上、ちょっと躓いたので備忘録代わりにご紹介しました。

関連記事

TOP