web-dev-qa-db-ja.com

Javascriptによる部分的なポストバック

SOで似たようなものは見つかりませんでした。

ASP.NETで、キューでUpdatePanelのJavascriptを使用して部分的なポストバックを発生させる方法はありますか?
__doPostBack()を試しましたが、完全なポストバックを実行します。
ダミーボタンでそれをだましてclick()を起動し、その方法で部分的なポストバックを処理できますが、だましよりも優雅な方法が必要です。

ありがとう。

編集:私はこれを見つけました disturbedbuddha.wordpress.com/2007/11/26/ …しかし私はそれを動作させることができません=(
この方法が機能することを望んでいます。それは私にぴったりです!これまでのところ、この最後の方法を使用してできることは、タイマーへのゲイン参照です。タイマーが最初に無効になっているので、タイマーを開始してもポストバックは発生しないようです。ただし、Ajaxがない場合、最初にタイマーを有効にすると、間隔を置いて問題なくポストバックされます。なぜAjax呼び出しがそれを引き起こさないのですか?

16
BeemerGuy

これを行うには、UpdatePanelでAsyncPostBackTriggerを使用できます。イベントを発生させることができるものが必要なため、ボタンの使用は非常に簡単で、非表示の場合はうまく機能します。

これがマークアップの場合:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
    <ContentTemplate>
        <!-- Contents... -->
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" />

パネルを更新したい場合は、次の電話をかけるだけです。

__doPostBack('<%=ReloadThePanel.ClientID %>', null);

これにより、ASP.NETは、ReloadThePanelがクリックされたと見なし、トリガーによって自動生成されたJavaScriptが残りを処理します。

[〜#〜]編集[〜#〜]

トリガーや非表示のボタンを使用せずに、UpdatePanelの純粋なJavaScript更新を実行できます。最初の引数としてクライアント側IDを使用して__doPostBackを呼び出す必要があります。

__doPostBack('<%=UpdatePanel1.ClientID %>', null);
33
Matthew Jacobs

@MatthewJacobsの回答を使用しましたが、__doPostBackを呼び出すとIE11でランタイム例外が発生することがわかりました。 __doPostBackの呼び出しは、テストした両方のブラウザー(IE11とChrome 52))で機能する次のJavaScript呼び出しに置き換えることができることがわかりました。

Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
    [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null
);

詳細については、 Sys.WebForms.PageRequestManager.beginAsyncPostBackメソッド を参照してください。

2
Oktalist