Диалог jQuery не работает после перенаправления на стороне сервера - PullRequest
0 голосов
/ 11 февраля 2009

У меня есть веб-сайт ASP.NET, который использует диалоговое окно jQuery, чтобы предоставить пользователю диалоговое окно условий загрузки. Как только пользователь согласился с условиями в диалоговом окне, я выполняю обратную передачу на стороне сервера, которая выполняет вызов Response.Redirect для страницы на другом веб-сайте, который отвечает за загрузку загрузки в браузер. Проблема заключается в том, что после выполнения вызова Response.Redirect диалоговое окно больше не отображается.

Я инициализирую диалог в событии document.ready, используя следующий код: -

$("#terms-dialog").dialog({
  modal: true,
  autoOpen: false,
  autoResize: false,
  height: 420,
  width: 500,
  overlay: {
    opacity: 0.5,
    background: "black"
  }
});

Код для отображения диалога следующий: -

function showTermsDialog(snippetid, title, agreement, url)
{
  $("#terms-dialog-text").html(agreement);
  $("#terms-dialog-controls").attr("style", "display: block;");
  $("#<%= this.SnippetID.ClientID %>").attr("value", snippetid);
  $("#<%= this.DownloadUrl.ClientID %>").attr("value", url);
  $("#terms-dialog").data("title.dialog", title); 
  $("#terms-dialog").dialog("open");
}

Этот код позволяет мне успешно отображать диалоговое окно несколько раз, но вызов диалогового окна («open») больше не работает после выполнения вызова Response.Redirect.

Кто-нибудь делал что-то похожее на то, что я пытаюсь сделать здесь? В качестве альтернативы, если кто-то может предложить какие-либо советы по отладке в диалоговом окне jQuery, они также будут оценены.

Ответы [ 4 ]

1 голос
/ 15 февраля 2009

Проблема, похоже, была вызвана функцией расширения, которую использовал мой диалог, которая помещала диалог jQuery в раздел формы страницы, чтобы обеспечить правильную работу обратных передач на стороне сервера. Я изменил поведение этого кода, чтобы вместо этого просто закрыть диалоговое окно и затем вручную вызвать обратный вызов на стороне сервера, используя следующую команду

<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>;
0 голосов
/ 25 февраля 2009

когда мы отправляем запрос со страницы, сценарии jquery успешно выполняются, но когда мы получаем ответ на той же странице, через которую мы отправили запрос, сценарии jquery не выполняются. это причина, по которой ваше всплывающее окно не отображает

0 голосов
/ 12 февраля 2009

Есть пара вещей, которые вы, вероятно, делаете неправильно.

Прежде всего, инициализация диалогового окна, где вы его ставили? в

$(document).ready( function() { ... } );

если нет, вам следует. Полагая, что вы действительно перенаправляете пользователя, и в этом перенаправлении вы перенаправляете на предыдущую страницу (ту, у которой есть диалог), так что (документ) .ready снова запускается и инициализирует диалог.

Но, используя ASP.NET, вы не должны делать это так, как вы, думайте о простой форме для вас и пользователя.

Используя .load в jQuery, вы можете загрузить другую страницу, поэтому давайте представим, что у вас есть кнопка в диалоге «Я согласен», которая дает пользователю запрошенный файл:

$(document).ready( function() {
  $("#terms-dialog").dialog({
    modal: true,
    autoOpen: false,
    autoResize: false,
    height: 420,
    width: 500,
    overlay: {
      opacity: 0.5,
      background: "black"
    },
    buttons: {
      I do not agree: function() { $(this).dialog('close'); }
      I agree: function() { 
        GetFileIfCookieExist("myfile.xls");
        $(this).dialog('close'); 
      }
    }
  });
});

function GetFileIfCookieExist(file) {
  // create cookie here
  $.load("getFile.aspx", { "f": file }, function() {
    // you can show a "loading" image
  });
}

в вашем getFile.aspx удалите весь HTML-код, кроме 1-й строки, и в событии Page_Load с выделенным кодом обработайте запрос и запишите документ обратно, используя метод Response.Write, например:

Response.Clear(); 
Response.AddHeader("content-disposition", "attachment;filename=" + Request["f"]);
Response.Charset = "";
Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
stringWrite = AppendMyFile();

Response.Write(stringWrite.ToString());
Response.End();

не забудьте создать файл cookie в запросе и проверить этот файл cookie на странице aspx, если он не существует, потому что пользователь принудительно загрузил его, а затем удалить файл cookie перед отправкой файла обратно пользователю.

cookie - это всего лишь стратегия, обеспечивающая возможность доступа, но она не безупречна, поскольку вам нужно, чтобы у пользователя были включены куки (как это делает Hotmail, чтобы вы могли читать электронную почту на его веб-сайте), вы можете использовать объект Session или другой метод, который Вы можете думать о.

Это только для того, чтобы вы могли лучше понять, что вы можете сделать.

0 голосов
/ 12 февраля 2009

К сожалению, я не могу ничего сказать о возможных причинах, но на вашем месте я попытался начать с некоторого кода отладки, используя такие инструменты Firebug как консоль и точки останова. Может быть, происходит какая-то переменная инициализации или подобная ошибка. Надеюсь, этот совет поможет вам немного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...