Вызов PostBack на другую страницу из всплывающего окна - PullRequest
2 голосов
/ 14 мая 2009

У меня есть главная страница и страница с подробностями.

Страница сведений представляет собой всплывающее окно javascript, вызываемое с главной страницы.

При нажатии кнопки «Сохранить» на странице сведений я хочу, чтобы главная страница «обновилась».

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

Редактировать - Использование window.opener.location.reload (true) работает, но предлагает пользователю повторно отправить информацию. Это 'document.location.href = document.location.href;' тоже не работает, потому что очищает форму на главной странице.

Ответы [ 6 ]

2 голосов
/ 12 июня 2009

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

2 голосов
/ 14 мая 2009

Я бы порекомендовал использовать модальное всплывающее окно для страницы сведений вместо открытия другого окна через javascript. Это позволит вам сохранить все на одной странице и даст вам больше контроля

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

window.opener.location.href='http://redirect.address';

Здесь есть похожий вопрос

1 голос
/ 14 июня 2009

Если вам нужно обновить страницу и сохранить данные формы без повторной отправки POST, вы можете (в зависимости от размера и сложности данных вашей формы) построить представление состояния формы в JavaScript, сохранить его в cookie или строку запроса, обновите страницу, установив document.location.href, а затем перезагрузите данные при загрузке окна.

Ниже приведена грубая версия этой идеи. Этот код вместе с подключением при загрузке должен был бы открыться (методы добавления cookie также должны были бы быть добавлены). window.opener.refreshWithState () будет вызываться из всплывающего окна.

(эта версия зависит от входов с уникальными идентификаторами)

(function() {
  window.refreshWithState = function() {
    setCookie("state", buildState());
    document.location.href = document.location.href;
  };

  function handleWindowLoad() {
    var state = readCookie("state");
    if (state) {
      restoreState(state);
      eraseCookie("state");
    }
  }

  function buildState() {
    var i, elem, elems, key, val, stateParts = [];

    elems = document.getElementsByTagName('INPUT');
    for (i = 0; elem = elems[i]; i++) {
      switch (elem.type) {
        case "checkbox":
        case "radio":
          val = elem.checked ? 1 : "";
          break;
        case "text":
        case "hidden":
        case "file":
          val = escape(elem.value);
          break;
        default:
          continue;
      }
      stateParts.push('"' + escape(elem.id) + '":"' + val + '"');
    }

    elems = document.getElementsByTagName('SELECT');
    for (i = 0; elem = elems[i]; i++) {
      stateParts.push('"' + escape(elem.id) + '":"' + elem.selectedIndex + '"');
    }

    return '{' + stateParts.join(',') + '}';
  }

  function restoreState(state) {
    var key, elem, val;
    var stateObj = eval('(' + state + ')');

    for (key in stateObj) {
      elem = document.getElementById(unescape(key));
      if (!elem) {
        continue;
      }
      val = stateObj[key];
      if (elem.tagName == "SELECT") {
        elem.selectedIndex = val;
      }
      else if (elem.tagName == "INPUT") {
        switch (elem.type) {
          case "checkbox":
          case "radio":
            elem.checked = !!val;
            break;
          case "text":
          case "hidden":
          case "file":
            elem.value = unescape(val);
        }
      }
    }
  }
})();
1 голос
/ 12 июня 2009

Я знаю, что вы сказали, что вам нужно сделать обратную передачу, но я предложу это предложение ...

Я бы разместил ajax updatepanel на главной странице, а затем разрешил всплывающие окна с подробностями для его обновления. Я не уверен, насколько вам нравится Microsoft Ajax и комплект управления Ajax, но это был бы мой первый подход.

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

1 голос
/ 14 мая 2009

Вы можете получить доступ к родительскому окну из всплывающего окна, используя некоторый javascript с window.opener . Оттуда вы можете использовать, например, location.href, чтобы обновить родительскую страницу. :)

1 голос
/ 14 мая 2009

Да, у вас должна быть возможность указать target = "_ parent" по ссылке на странице сведений. Вы должны будете привязать событие к этому, чтобы закрыть страницу с подробностями, но должны начать.

например: <a href="mainPage.html" target="_parent">Save Details</a>

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