UpdatePanel里面的Jquery UI对话做了很奇怪的事情

时间:2009-11-04 13:40:00

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

我有一个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,这不是我想要的。
  4. 所以,我的问题是:

    有没有一种方法可以在updatepanels回发时注入javascript,这将会再次执行并正确创建对话框?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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