2

我正在使用 XMLHTTPRequest 对象从 javascript 进行一些直接的异步调用。成功后,使用某些返回值,我想在更新面板上进行异步回发并运行一些服务器端方法。这是关于我现在如何实施它:

<script language="javascript">
      function AjaxCallback_Success(objAjax) {
        if (objAjax.responseText == "refresh") {
                document.getElementById('<%= btnHidden.ClientID %>').click();
         }
      }
    </script>
    <asp:UpdatePanel ID="upStatus" runat="server">
    <ContentTemplate>
<asp:Button ID="btnHidden" runat="server" style="display: none;" OnClick="SomeMethod" />
    <asp:DropDownList ID="ddlStatus" field="Orders_Status" parent="Orders" runat="server">
    </asp:DropDownList>
    </ContentTemplate>
    </asp:UpdatePanel>

这与工作流程有关。如果在您处理订单时,有人为其开具发票,那么状态下拉列表中的可用选项实际上会发生变化。因此,定时甚至会检查更改,如果有更改,这通常不会发生,更新面板会发回,下拉列表会根据来自 ajax 响应文本的各种返回值重新绑定到新数据表.

我的原始代码实际上比这复杂得多,但我已经抽象到足以使我的概念更清晰。是否有更好、更简洁的方法来做到这一点,方法是删除隐藏按钮并进行直接的 javascript 调用,这将导致更新面板异步回发并运行服务器端方法?

4

2 回答 2

3

使用 UpdatePanel 时要非常小心,如果使用不当,它们可能会非常沉重,正如我在此处解释的那样。

但是提交表单的 JavaScript 是:

__doPostBack('eventTarget','eventArguments');

所以在你的例子中,你会有类似的东西:

__doPostBack('<%= btnHidden.ClientID %>','');
于 2008-12-05T19:43:43.607 回答
1

您可以删除隐藏按钮并调用

__doPostBack('upStatus','');

这将导致该更新面板的异步更新

于 2008-12-05T19:48:01.570 回答