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

在jQueryUI模态对话框中使用时,从Usercontrol触发两次jQuery逻辑,jquery,asp.net,jquery-ui,user-controls,Jquery,Asp.net,Jquery Ui,User Controls,我有一个asp.net用户控件,我使用它将一组HTML和Jquery逻辑放入其中,以便在多个页面上共享。此usercontrol有一些从json调用加载的下拉框,并且没有添加代码隐藏逻辑 当我在一个普通的页面上使用这个用户控件时,它工作得非常好,一点问题也没有 但是,当我将usercontrol包装在div中并使用jqueryUI模式对话框时,usercontrol中的所有内容都会触发两次。不仅是初始$(document).ready(function(){})中的代码;,但每个函数在调用时也会

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

当我在一个普通的页面上使用这个用户控件时,它工作得非常好,一点问题也没有

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

在VisualStudio中调试时,我看到所有内容都是首先从外部JS文件调用的,然后再从一个“脚本块”文件调用,该文件以某种方式动态生成

此脚本块文件不是在不以模式包装用户控件的页面上生成的

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

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

--编辑--

这是分区:

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

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

查看用户控件上编写的java脚本/jQuery是否每次都会加载到登录页上

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

如果您将加载多个用户控件,那么脚本将被触发多个

它将在加载用户控件时被触发

为了克服这个问题,jQuery调用被放置在登录页上

并在加载时使用用户控件绑定jQuery

编辑1

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

我的观点是

  • 您正在打开页面上的用户控件
  • 用户控件具有jQuery调用
  • 如果打开对话框,jQuery调用将成为登录页的一部分
  • 您将关闭该对话框
  • jQuery仍然是登录页的一部分
  • 再次打开一个对话框
  • 写在用户控件上的jQuery的第二个副本加载到登录页
  • 现在您有了两份jQuery代码的副本
  • 到时候你们会打开和关闭,会有尽可能多的副本

  • 我想这就是问题所在。

    我能够确定发生了什么

    指向外部JavaScript文件的链接位于用户控件本身内。将此链接移出用户控件并移到主页可以修复此问题

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

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


    如果有人理解为什么会发生这种情况,我很想知道。

    您能用一些用Div包装的代码来详细说明一下吗?是否使用“更新面板”并进行部分页面渲染?当您添加DIV时,似乎有什么东西再次绑定了事件。当然,我用DIV、usercontrol和jquery调用更新了问题。此页面上没有更新面板或任何其他asp.net ajax调用。我认为同一页面中有多个用户控件实例。因此,您将拥有两个或更多的就绪函数,或者您在用户控件中编写的任何脚本。请查看源代码!检查这个现有的帖子。可能有助于you@Murali这实际上是我检查的第一件事。控件只有一个实例,并且usercontrol中的任何内容都不会在页面源中多次出现。页面上只有一个user control实例。当没有调用jQueryUI对话框函数时,它也只正确地触发一次。据我所知,您将在页面上打开和关闭您的dilog。正确的?每次在模型弹出窗口上打开用户控件时,它的javascript都会成为登录页的一部分。但是当你关闭弹出窗口时,它将不会从你的登录页消失。这不是一个真正的对话框。本例中的usercontrol始终存在于页面上。包含它的div正在根据需要隐藏和显示。我还通过在页面加载上设置一个中断以及观察原始http流量来确认usercontrol本身没有被重新加载。
            $("#divMyDiv").dialog({
                autoOpen: false,
                height: 400,
                width: 400,
                modal: true,
                open: function (type, data) {
                    $(this).parent().appendTo("form");
                }
            });