【问题标题】:Jquery UI Dialog inside UpdatePanel doing strange thingsUpdatePanel 中的 Jquery UI 对话框做奇怪的事情
【发布时间】:2009-11-04 13:40:00
【问题描述】:

我有一个 DIV,其中有一个 asp:repeater,它根据数据将信息放入此 div。然后我使用 Jquery 的 UI 对话框通过单击按钮向用户显示数据。这一切都很顺利。

所以,我希望能够将记录添加到填充中继器的数据中。我在屏幕的另一部分可以输入这些数据,并使用 ajax 调用将其保存到数据库中。这也很有效。

然后我想更新我的对话框中的数据,而不必完全回发到服务器。所以,这通常很容易。我将我的 div 放入一个 UpdatePanel,并从 Jquery 启动一个 __doPostBack。然后刷新数据,这也可以游泳到一个点。

一旦 __doPostBack 完成,该 div 将不再隐藏。它现在显示在我的页面上(请注意更新的数据),但我用来显示对话框的 javascript 现在不再有效。

一些调查表明:

  1. 在页面初始加载时,告诉 jquery 从 div 创建对话框的 javascript 从表单上的任何位置获取 div,并将其附加到 body 元素。
  2. 当更新面板回发时,div 被重新创建,但是将其转换为对话框的 javascript 也没有再次执行(我可以理解...我们还没有完成页面的完整加载,所以 javascript 不会再次执行。
  3. 这意味着 div 不再是“对话框”,而是我页面上的简单 div,这不是我想要的。

所以,我的问题是:

有没有办法在 updatepanels 回发后注入 javascript,这将再次正确执行并创建对话框?

【问题讨论】:

  • 除非 __doPostBack(或 updatepanels)可以回调自定义函数,否则我看不出你怎么能做到这一点。
  • 我们能看到这样做的代码吗?
  • 我已经解决了这个问题。我没有使用更新面板来刷新网格的内容,而是通过 ajax 调用返回 HTML,并在插入完成后设置 div 的 innerhtml。运行良好,无需更新面板。

标签: asp.net jquery asp.net-ajax updatepanel


【解决方案1】:

解决方案是根本不使用 Updatepanel,只需使用通过 jquery ajax 调用接收到的数据更改 div 的 innerHTML。

【讨论】:

  • 谢谢,正如您在我的 cmets 中看到的那样,这正是我最终要做的。
【解决方案2】:

我找到了另一个解决方案。我将对话框初始化 javascript 放在一个名为 SetupDialog 的单独函数中,而不是放在 $(function () { }); 块中。

然后我在 Page_Load 中使用ScriptManager.RegisterStartupScript 来注册脚本,以便每次更新面板更新时它都会运行:

ScriptManager.RegisterStartupScript(this, GetType(), "SetupDialog", "SetupDialog();", true);

在这种情况下,对话框仅在 UpdatePanel 更新后才能工作。如果您在此之前需要该对话框,那么您也可以在 $(function () { }); 块内调用 SetupDialog。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多