部分页面回发后的ASP.NET注册脚本(UpdatePanel)

时间:2010-08-26 00:06:12

标签: javascript asp.net asp.net-ajax updatepanel partial-page-refresh

我有一个简单的表单(文本框,提交按钮),它包含在更新面板中。

<asp:UpdatePanel ID="ReplyUpdatePanel" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
       <asp:Textbox id="ReplyTextBox" runat="server"/>
       <asp:Button id="SubmitButton" OnClick="SubmitButton_Click" runat="server"/>
    <ContentTemplate>
</asp:UpdatePanel>

因此,当我单击按钮时,服务器端单击事件被触发(SubmitButton_Click),数据库发生了一些事情,并且页面被重新呈现(异步)。

这是我的问题 - 我需要在所有“事情发生在db”之后执行一些JavaScript。

换句话说,我需要创建一些JavaScript,其数据/参数基于服务器端逻辑。

我试过这个:

Page.RegisterStartupScript

和这个

ScriptManager.RegisterStartupScript

既没有工作(没有任何反应)。

现在我现在可以使用客户端AJAX库(在部分更新完成后执行客户端脚本)挂钩.add_pageLoaded函数,但问题是我需要来自服务器的数据在按钮点击事件上创建。

即:

Sys.Application.add_init(function () {
                Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function (sender, args) {
                    var panels = args.get_panelsUpdated();
                    for (var i = 0; i < panels.length; i++) {
                        // check panels[i].id and do something
                    }
                });
            });

我现在能想到的唯一“黑客”是上面做的,但是调用一个Web服务,再次获取所有数据,然后执行我的脚本。我说“hack”因为我不需要进行异步回发,挂钩到after-partial-postback事件处理程序然后再次调用服务器以获取之前发布的信息。

似乎是一个常见的问题。不,我不能删除UpdatePanel(尽管我很乐意),不想浪费时间争论为什么。

任何非黑客的想法?

修改

澄清我需要发送到脚本的数据:

我在文本框中键入一些文本,单击“提交”,然后服务器创建数据库记录并返回一个对象,该对象具有ID,Name,URL,Blah等属性。这些是脚本所需的值。

因此,如果我要从客户端代码调用Web服务,为了获取刚创建的值,我需要做一些黑客攻击(获取具有文本框值的最后修改记录)。不理想,也不是两个AJAX调用一个表单的帖子。 (更新面板回发,然后是Web服务调用)。

1 个答案:

答案 0 :(得分:2)

而不是add_pageLoaded,您需要add_endRequest,例如:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {
  //check here...
});

不同之处在于endRequest会在任何部分回发返回时运行。