更新パネルがカスタムコントロールの完全なポストバックを行うのはなぜですか?
-
03-07-2019 - |
質問
かなり複雑なカスタムコントロールがあります-カスタムコントロールには更新パネルがいくつかあります。
更新パネル内で次のようなコントロールを使用しようとしています:
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="Sample Button" /> <asp:Label ID="lblTime" runat="server"></asp:Label>
<cc1:MyCustomControl ID="MyCustomControl1" runat="server" >
</cc1:MyCustomControl>
</ContentTemplate>
</asp:UpdatePanel>
更新パネルのボタンをクリックすると、非同期ポストバックが実行され、画面「フリッカー」が表示されません。カスタムコントロールのボタンをクリックすると、ページがちらつき、完全にポストバックします。
カスタムコントロールの内部には、(トリガーに基づいて)完全なポストバックを実行しようとしている更新パネルがあります。
カスタムコントロール内で何が起こっていても、ページレベルのUpdatePanelで完全なポストバックを行わないようにするにはどうすればよいですか?
解決 2
これに似た問題を解決策を見つけました: UpdateControlを取得してCompositeControlのDropDownListをインターセプトするにはどうすればよいですか
ポストバックを引き起こすコントロールは、完全なポストバックトリガーを備えたupdatepanelにありました。更新パネルで入れ子にならないようにそのコントロールを引き出すことができ、解決しました。
他のヒント
up1 UpdatePanelコントロールのbtn1コントロールでasp:AsyncPostBackTriggerを明示的に設定することを考えましたか。
<asp:UpdatePanel ID="up1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="Sample Button" />
<asp:Label ID="lblTime" runat="server"></asp:Label>
<cc1:MyCustomControl ID="MyCustomControl1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
編集:更新パネルのボタンのOnClickイベントでUpdateメソッドを明示的に呼び出そうとしましたか?これには、カスタムコントロール内に埋め込まれた更新パネルが含まれます。
カスタムコントロールに他の問題があり、フルページポストバックが発生していないかどうかを最初に確認します。どのような場合でも、更新パネル全体が更新されます(ajaxを使用)。
その後、このNesting UpdatePanel Controlsセクションをご覧ください。 http://msdn.microsoft.com/en-us/library/bb398867 .aspx#
また、EnablePartialRenderingプロパティがtrueに設定されたScriptManagerコントロールがあることを確認してください。
UpdatePanelで、プロパティ ChildrenAsTriggers =&quot; true&quot;
を設定します。これにより、UpdatePanelは、UpdatePanel内から発生する all PostBack呼び出しをインターセプトするように指示されます。
UpdateModeプロパティもご覧ください。更新をトリガーするイベントの種類を決定します。 (デフォルトでは、画面上の他のパネルが更新されると、UpdatePanelが更新されます。これにより、何が起こっているのかがわかるまでしばらくの間私を投げました。)