导致PostBack与PopUp不同的页面

时间:2009-05-14 14:12:38

标签: asp.net javascript popup postback

我有一个主页面和一个详细信息页面。

详细信息页面是从主页面调用的javascript弹出窗口。

在详情页面上点击“保存”按钮后,我希望主页面“刷新”。

是否有一种调用回发到主页面的方法,同时还从详细信息页面维护保存回发?

编辑 - 使用window.opener.location.reload(true)确实有效,但它会提示用户重新发送信息。这个'do​​cument.location.href = document.location.href;'不起作用,因为它清除主页上的表单。

6 个答案:

答案 0 :(得分:2)

我建议在详细信息页面使用模态弹出窗口,而不是通过javascript打开另一个窗口。这将允许您将所有内容保存在同一页面上,并为您提供更多控制

考虑到你目前的情况,我认为你正朝着正确的方向前进。尝试一下,看看它是否符合您的需求。

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

Here是一个类似的问题

答案 1 :(得分:2)

对于无更新面板的解决方案,您可以让弹出窗口向文本字段返回一个值,并在更改时回发该文本字段。

答案 2 :(得分:1)

是的,您应该可以在详细信息页面的链接上执行target =“_ parent”。 你必须将一个事件绑定到那个以关闭详细信息页面但是应该让你开始。

例如:     <a href="mainPage.html" target="_parent">Save Details</a>

答案 3 :(得分:1)

您可以使用window.opener的一些javascript从弹出窗口访问父窗口。 从那里,您可以使用例如location.href来刷新父页面。 :)

答案 4 :(得分:1)

我知道你说你需要做一个回发,但我会提出这个建议......

我会在主页面上放置一个ajax updatepanel,然后允许详细信息弹出窗口更新它。我不确定你对微软ajax和ajax控制套件有多喜欢,但那将是我的第一个方法。

显然我不知道完整的范围,但我没有看到页面的问题要求用户重新提交数据消失和页面更新,而没有某种基于JavaScript的解决方案。

答案 5 :(得分:1)

如果您需要刷新页面并保留表单数据而不重新提交POST,您可以(根据表单数据的大小和复杂性)在JavaScript中构建表单状态的表示形式,将其存储在cookie或查询字符串,通过设置document.location.href刷新页面,然后在窗口加载时重新加载数据。

以下是这个想法的粗略版本。这个代码与onload wire-up一起进入开启者(cookie处理方法也需要添加)。 window.opener.refreshWithState()将从弹出窗口中调用。

(此版本取决于具有唯一ID的输入)

(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);
        }
      }
    }
  }
})();