0

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

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

但是,当我将用户控件包装在 div 中并使用 jqueryUI 模式对话框时,用户控件中的所有内容都会触发两次。不仅是初始 $(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:”功能,问题仍然存在。但是,如果我删除整个对话框块,它就不会发生,所以它是特定于这个对话框调用的。

4

2 回答 2

1

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

并且将在您的登录页面上有多个相同的 javascript/jQuery 代码副本。

如果您将加载更多的用户控件,则脚本将被触发不止一个。

它将在您加载用户控件时被触发多次。

为了克服这个问题,请在登录页面上调用 jQuery。

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

编辑 1

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

我的观点是

  1. 您正在页面上打开用户控件
  2. 用户控件有一个 jQuery 调用
  3. 如果您打开对话框,jQuery 调用将成为登录页面的一部分
  4. 你将关闭对话框
  5. 你的 jQuery 仍然是你登陆页面的一部分
  6. 你再次打开一个对话框
  7. 在加载到登录页面的用户控件上编写的 jQuery 的第二个副本
  8. 现在你有两份你的 jQuery 代码
  9. 并且随着时间的推移,您将打开和关闭将有尽可能多的副本

我认为这是问题所在。

于 2012-11-18T04:57:27.723 回答
0

我能够确定发生了什么。

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

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

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

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

于 2012-11-18T07:31:52.297 回答