Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.NETMVC-如何在ajax调用后使jQuery工作_Jquery_Asp.net Mvc_Ajax_Jquery Ui_Asp.net Mvc 3 - Fatal编程技术网

asp.NETMVC-如何在ajax调用后使jQuery工作

asp.NETMVC-如何在ajax调用后使jQuery工作,jquery,asp.net-mvc,ajax,jquery-ui,asp.net-mvc-3,Jquery,Asp.net Mvc,Ajax,Jquery Ui,Asp.net Mvc 3,好的,用mvc让我的脚湿了。我正在尝试构建一个用户配置文件类型页面。该页面由几个部分组成,每个部分通过局部视图加载 我希望能够在jQueryUI模式对话框中单独编辑每个部分。这一切都正常工作(包括通过ajax将编辑视图加载到模式中并提交更改) 我的问题是,在任何ajax调用之后,我的jQuery UI对话框都停止工作,因此我无法关闭或打开对话框 当然,我可以用.live方法修复button clicsk之类的问题,但我无法找到让jQuery UI项继续工作的最佳方法 最好的办法是什么?我想我对a

好的,用mvc让我的脚湿了。我正在尝试构建一个用户配置文件类型页面。该页面由几个部分组成,每个部分通过局部视图加载

我希望能够在jQueryUI模式对话框中单独编辑每个部分。这一切都正常工作(包括通过ajax将编辑视图加载到模式中并提交更改)

我的问题是,在任何ajax调用之后,我的jQuery UI对话框都停止工作,因此我无法关闭或打开对话框

当然,我可以用.live方法修复button clicsk之类的问题,但我无法找到让jQuery UI项继续工作的最佳方法

最好的办法是什么?我想我对ajax调用后先前加载的jQuery插件会发生什么感到困惑。我应该能够从主页上引用ajax加载内容中的元素吗

编辑: 好的…这里有一些代码来显示发生了什么

用户单击用户信息部分上的编辑按钮

$('#editInfo').live("click", function () {
        dialogInit(450, 550, 'User Information');
        $('#dialog').dialog('open')
        $.ajax({
            type: 'GET',
            url: '../info/edit',
            data: {},
            success: function (response) {
                $('#dialog').html(response); //loads the partial edit view into the dialog div...works fine to here.

            }
        });
        return false;
    });
发生这种情况后,屏幕上有一个带有保存按钮的模式。当点击save按钮时,我发布我的ajax表单,成功后调用这个JS函数

function infoUpdate(response) {
    dialogInit(450, 550, 'User Information');
    $('#dialog').dialog('close');
    $('#info').html(response);
}
这会将新的用户信息部分视图加载到主页上相应的div中…工作正常

这里的问题是对话框没有关闭…所以对它的引用似乎丢失了,即使我正在用我的dialogInit函数重新初始化它…看起来像这样

function dialogInit(height, width, title) {
    $('#dialog').dialog({
        autoOpen: false,
        modal: true,
        draggable: false,
        resizable: false,
        height: height,
        width: width,
        title: title
    });
}
编辑2:


上面的代码还会导致我的ajax表单被发布多次…每次单击submit按钮都会有一次额外的发布时间…不太好

有3种可能的方法可以使动态生成的内容按预期工作:

  • 在每次重新生成后(在AJAX之后或在任何其他动态内容更改之后)将事件处理程序附加到它
  • .活
  • 优化.live-.delegate(事件将实际附加到某个容器,而不是像.live中那样附加到所有文档)

  • UPD:那么,你是对的,你的对话框本身保持不变。但是它里面的所有内容都被替换了(用新的HTML),因此旧按钮等的DOM元素(带有附加的事件处理程序)在它之后就不存在了。

    我想我和stephen776有同样的问题,它困扰了我一整天

    在Ajax调用之后,我所有的对话框似乎都没有定义,我得到了很多
    $('example-dialog-box')。dialog不是一个函数
    错误

    我使用的是
    Kohana PHP MVC框架
    。在进行了大量徒劳的谷歌搜索之后,我决定在我的浏览器上启动由
    Ajax
    调用的url,查看它返回了什么,这有效地解决了我的问题。我意识到Ajax调用响应工作正常,并且具有我想要的所有元素。然而,它也有head标记以及所有的link和script标记,这意味着浏览器被新的
    jQuery
    脚本所包含的内容弄糊涂了


    我确保Ajax响应只返回我需要的内容,没有额外的
    HTML
    JavaScript
    ,这对我来说很好。我意识到,这对于
    MVC
    框架上的人来说可能是一件非常头疼的事情,因为几个页面通常共享
    HTML
    ,当编写一个由Ajax调用的方法时,您可以使用一个已经存在的视图并向其添加所需的响应。此视图可能已经具有大多数页面所共有的头标记,这将导致浏览器表现出非常奇怪的行为。

    我无法回答您关于MVC的具体问题,但其工作方式可能与ASP.NET WebForms AJAX调用相同。AJAX面板完全被新的DOM元素取代,这就是旧事件不再工作的原因。请参阅:在这种情况下,我的部分视图仅替换对话框div内部的HTML,因此我不明白为什么我会丢失对外部div的引用,UI对话框小部件在外部div上进行初始化。我还计划重新使用一个UI对话框来显示每个部分的编辑表单……这是否被视为最佳做法?在这种情况下,我的部分视图只替换对话框div内部的HTML,所以我不明白为什么我会丢失对外部div的引用,UI对话框小部件是在外部div上初始化的。OK,即使您执行空AJAX调用($.get('/')),它也不起作用?所以。。您的呼叫在做什么(之后该对话框不起作用)?你能发布JS代码和适当的标记吗?代码发布了…我感谢你的帮助我想我的问题是…我如何确保在DOM更新后可以在UI对话框上调用方法?我必须销毁并重新初始化吗?如果你把答案分成几段,让它更具可读性,这将有助于你回答问题。