当在jQueryUI模式对话框中使用时,jQuery逻辑从Usercontrol触发两次

时间:2012-11-18 04:36:40

标签: jquery asp.net jquery-ui user-controls

我有一个asp.net用户控件,我用它来放入一堆HTML和Jquery逻辑,以便在多个页面上共享。这个用户控件有一些从json调用加载的下拉框,没有添加代码隐藏逻辑。

当我在普通页面上使用此用户控件时,它可以正常工作,完全没有问题。

但是,当我将usercontrol包装在div中并使用jqueryUI模式对话框时,usercontrol中的所有内容都会触发两次。不仅是初始$(document).ready(function(){});中的代码,而且每个函数在被调用时也会被触发两次。

在Visual Studio中对此进行调试,我发现首先从外部JS文件中调用所有内容,然后再从“脚本块”文件中调用,该文件以某种方式即时生成。

在未将用户控件包装在模态中的页面上未生成此脚本块文件。

如果我使用IISExpress或IIS7,也会发生同样的情况。

问题是,为什么要创建这个脚本块文件,为什么我的所有jQuery逻辑都会被触发两次?

- 编辑 -

这是div:

  <div id="divMyDiv" title="MyDiv">
     <uc1:MyUserControl runat="server" ID="MyUsercontrol" />
</div>

以下是使用它的模态逻辑:

        $("#divMyDiv").dialog({
            autoOpen: false,
            height: 400,
            width: 400,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("form");
            }
        });

注意:即使我删除了“open:”函数,问题仍然存在。但是,如果删除整个对话框,它会发生,因此它特定于此对话框调用。

2 个答案:

答案 0 :(得分:1)

查看用户控件上编写的java-script / jQuery是否每次都会在着陆页上加载。

并且您的目标网页上会有相同javascript / jQuery代码的多个副本。

如果您将加载多个用户控件,则会激活多个脚本。

将会加载用户控件的次数。

要在登录页面上克服这个地方的jQuery调用。

在加载时将jQuery与用户控件绑定。

编辑1

我知道你只有一个用户控件实例。

我的观点是

  1. 您正在页面上打开用户控件
  2. 用户控件有一个jQuery调用
  3. 如果您打开对话框
  4. ,jQuery调用将成为目标网页的一部分
  5. 您将关闭对话框
  6. 您的jQuery仍然是着陆页的一部分
  7. 再次打开一个对话框
  8. 您的jQuery的第二个副本,写在您的用户控件上,已加载到您的目标网页
  9. 现在你有两个jQuery代码副本
  10. 并且您可以随时打开和关闭那里的副本
  11. 我认为这是问题。

答案 1 :(得分:0)

我能够确定发生了什么。

外部JavaScript文件的链接位于用户控件本身内。将此链接移出用户控件并进入主页面修复它。

无论出于何种原因,这都会阻止生成动态脚本块文件,因此,也停止了两次调用每个函数。

我只需要记住将此JavaScript链接添加到使用此用户控件的每个页面,或将其添加到我的母版页。

如果有人理解为什么会这样,我很想知道。