gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:39:49 25 4
gpt4 key购买 nike

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

<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),数据库会发生一些事情,然后页面将重新呈现(异步)。

这是我的问题 - 我需要在所有“数据库发生问题”之后执行一些 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”是因为我不需要执行异步回发、连接到部分回发后事件处理程序然后再次调用服务器以获取先前发布的信息。

似乎是一个常见问题。不,我不能删除 UpdatePanel(即使我很想这样做),不想浪费时间争论为什么。

有什么非 hacky 想法吗?

编辑

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

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

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

最佳答案

您需要 add_endRequest 而不是 add_pageLoaded在这里,像这样:

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

区别在于endRequest在任何部分回发返回时运行。

关于javascript - 部分页面回发后的 ASP.NET 注册脚本 (UpdatePanel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571173/

25 4 0