Кто-нибудь знает, почему диалог jquery показывает устаревшее содержимое при обновлении ajax? - PullRequest
0 голосов
/ 27 апреля 2010

У меня есть серия ссылок, и когда я нажимаю на ссылку, я хочу показать диалог с подробной информацией. Эта деталь возвращается из запроса 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 голосов
/ 27 апреля 2010

Я думаю, это связано с тем, как вы создаете диалог несколько раз. Возможно, вы захотите попробовать создать диалог за пределами живого. Затем просто измените содержимое диалога по мере необходимости и снова откройте диалог. В этой ситуации я обычно делаю сообщение о загрузке, открываю диалоговое окно и затем запускаю 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);      
  });

});
0 голосов
/ 28 апреля 2010

я нашел решение здесь , используя метод .one ()

0 голосов
/ 27 апреля 2010

Вам нужно убедиться, что вы полностью уничтожаете свой #dialogDiv после того, как вы показываете каждый модал.

Я столкнулся с той же проблемой, когда использовал один и тот же div для каждого диалога, который вы хотите показать.

Я забыл с головы до головы, но при определении вашего диалогаOpts добавить что-то вроде этого:

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

Вот ссылка на jQuery API: http://docs.jquery.com/UI/Dialog

Надеюсь, это поможет понять!

  • Джесси
...