3

我有一个必须回发才能执行某些逻辑的 LinkBut​​ton。

完成后,我不想在浏览器中重新加载页面,而是想保留它并弹出一个新窗口。

到目前为止,我的最佳想法是将 LinkBut​​ton 放在 UpdatePanel 中,并让它在重新加载时呈现一些 JavaScript,但我认为这完全是 hacky。另外,如果我没记错的话,更新面板中的 JavaScript 无论如何都不会运行。

还有其他想法吗?

4

3 回答 3

6

使用 LinkBut​​ton.PostBackUrl 将不同的页面设置为 POST 到,并使用一些客户端脚本来获取新窗口(并恢复旧目标,以便将来的回发正常工作)。第二页可以使用 PreviousPage 从原始页面访问任何需要的状态。

<script runat="server">
   void lnk_Click(object sender, EventArgs e) {
      // Do work
   }
</script>

<script type="text/javascript">
   var oldTarget, oldAction;
   function newWindowClick(target) {
      var form = document.forms[0];
      oldTarget = form.target;
      oldAction = form.action;
      form.target = target;

      window.setTimeout(
         "document.forms[0].target=oldTarget;"
         + "document.forms[0].action=oldAction;", 
         200
      );
   }
</script>

<asp:LinkButton runat="server" PostBackUrl="Details.aspx" Text="Click Me"
  OnClick="lnk_Click"
  OnClientClick="newWindowClick('details');" />
于 2008-11-21T21:56:51.223 回答
2

这是代码:

protected void Button1_Click(object sender, EventArgs e)

{

// Do some server side work

string script = "window.open('http://www.yahoo.com','Yahoo')";

if (!ClientScript.IsClientScriptBlockRegistered("NewWindow"))

{

ClientScript.RegisterClientScriptBlock(this.GetType(),"NewWindow",script, true);

}

}
于 2008-11-21T21:22:50.840 回答
1

您可以尝试的一件事是让您的 LinkBut​​ton OnClick 事件进行处理,然后使用弹出代码注册一个 Page.ClientScript.RegisterStartupScript,这会将一些 Javascript 放入标签中以在页面加载后触发。处理完成后,这应该会启动您的新窗口。

编辑:阅读您的评论,我相信您仍然可以使用这种方法,将结果存储在会话变量中,然后让弹出页面从那里提取结果。

于 2008-11-21T20:00:24.093 回答