有谁知道为什么jquery对话框在ajax更新上显示陈旧内容?

时间:2010-04-27 14:25:37

标签: jquery asp.net-mvc jquery-ui-dialog

我有一系列链接,当我点击链接时,我想显示一个包含详细信息的对话框。此详细信息从jquery ajax请求返回。

我使用下面的代码通过ajax在jquery对话框中显示部分结果。

这是jquery代码:

$(document).ready(function() {

 $('a.click').live('click', function() {

    var url = '/Tracker/Info?id=' + $(this).attr("id");

    var dialogOpts = {
        modal: true,
        bgiframe: true,
        autoOpen: false,
        height: 600,
        width: 450,
        overlay: {
            opacity: 0.7,
            background: "black"
        },
        draggable: true,
        resizeable: true,
        open: function() {
            //display correct dialog content
            $("#dialogDiv").load(url);
        }
    };

    $("#dialogDiv").dialog(dialogOpts); //end dialog
    $("#dialogDiv").dialog("open");

});

});

这是我的控制器操作代码:

    public ActionResult Info(int id)
    {
        return PartialView("LabelPartialView", _Repository.GetItem(id));            
    }

问题在于:

当我第一次点击这个时(假设我发送id = 1234)它可以正常工作 当我点击另一个项目(假设我发送id = 4567)时,它仍显示1234的内容 我再次点击第二个项目(再次是4567),然后它将显示4567的内容。

有谁知道为什么第一次可能不会刷新?这是时间问题吗?

3 个答案:

答案 0 :(得分:0)

在显示每个模态后,您需要确保完全摧毁#dialogDiv。

在为要显示的每个对话框重复使用相同的div时,我遇到了同样的问题。

我忘记了我的头脑,但在定义你的dialogOpts时添加如下内容:

close: function() { $("#dialogDiv").dialog("destroy"); },

以下是jQuery API参考:http://docs.jquery.com/UI/Dialog

希望这能提供一些见解!

  • 杰西

答案 1 :(得分:0)

我想这与你多次创建对话框的方式有关。您可能想尝试在live之外创建对话框。然后根据需要更改对话框内容并重新打开对话框。我通常在这种情况下做的是加载消息,打开对话框然后启动ajax调用来替换内容。这样的事情。

$(function () {

  $("#dialogDiv").dialog({
      modal: true,      
      bgiframe: true,      
      autoOpen: false,      
      height: 600,      
      width: 450,      
      overlay: {      
        opacity: 0.7,      
        background: "black"      
      },      
      draggable: true,      
      resizeable: true
  });

  $('a.click').live('click', function() {      
    var url = '/Tracker/Info?id=' + $(this).attr("id");      
    $("#dialogDiv")
      .html('Loading')
      .dialog("open")
      .load(url);      
  });

});

答案 2 :(得分:0)

我使用.one()方法找到了solution here