2011-01-30 62 views
0

好让我的脚湿与MVC。我正在尝试构建用户配置文件类型页面。该页面由多个部分组成,每个部分都通过局部视图加载。asp.net MVC-如何获得jQuery的AJAX工作后调用

我希望能够单独编辑每个部分的jQuery的UI模式对话框内。我有这一切正常工作(包括加载编辑视图通过阿贾克斯进入模式,并提交更改)。

我的问题是,任何ajax调用后,我的jQuery UI对话框停止工作,所以我无法关闭或打开一个对话框。

我可以,当然,解决的事情,像按钮clicsk与.live方法,但我不能想出得到了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; 
    }); 

发生这种情况后我有带有保存按钮的屏幕上的模式。当点击保存按钮,我张贴我的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的形式发布多次...另外的时间我每次点击提交按钮......不好

+0

我无法专门回答你关于MVC的问题,但它可能与ASP.NET WebForms AJAX调用的方式相同。 AJAX面板被完全替换为新的DOM元素,这就是为什么旧事件不再有效。请参阅:http://stackoverflow.com/questions/256195/jquery-document-ready-and-updatepanels/256253#256253 – 2011-01-30 19:05:49

+0

在这种情况下,我的局部视图只取代对话框div内的HTML,所以我不明白为什么我会失去对UI对话框小部件初始化的外部div的引用 – stephen776 2011-01-30 19:08:28

+0

我还计划重新使用一个UI对话框来显示每个部分的编辑表单......这会被认为是最佳实践吗? – stephen776 2011-01-30 19:09:16

回答

2

有3点可能的方式,使动态生成的内容的工作如预期的那样:

  1. 在每次重新生成后(AJAX之后或其他动态内容更改后)附加事件处理程序。
  2. .live
  3. 优化.live - .delegate(事件将被实际.live连接到某些容器,而不是所有文档)

UPD:所以,你说得对,你#对话框本身保持不变。但是它内部的所有内容都被替换(使用新的HTML),所以旧的按钮等DOM元素(带附加事件处理程序)将不会存在。

0

我觉得我有同样的问题,因为stephen776它已经困扰了我一整天。

Ajax调用后,我的所有对话框似乎都是未定义的,我得到了很多$('example-dialog-box').dialog is not a function错误。我想使用Kohana PHP MVC framework。经过很多没有结果的谷歌搜索之后,我决定在浏览器中启动Ajax调用的URL,以查看它返回的内容,这有效地解决了我的问题。我意识到Ajax调用响应工作正常,并具有我所需的所有元素。但是,它也具有head标签及其所有链接和脚本标签,这意味着浏览器会被新的jQuery脚本包含混淆。

我确保Ajax响应只返回我需要的,没有额外的HTMLJavaScript,这对我来说工作得很好。我意识到这对于MVC框架中的某个人来说可能是一个很头疼的问题,因为几个页面通常共享HTML,并且在编写Ajax调用的方法时,可以采用已存在的视图并向其添加所需的响应。这个视图可能已经有了大部分页面常见的head标签,这会导致你的浏览器出现非常奇怪的行为。