【问题标题】:ASP.NET WebForms + Postback then open popupASP.NET WebForms + Postback 然后打开弹出窗口
【发布时间】:2008-11-21 19:54:29
【问题描述】:

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

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

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

还有其他想法吗?

【问题讨论】:

  • 您希望将结果加载到弹出窗口中,还是其他方式?
  • 结果进入弹出窗口。我不想完全刷新主页,因为这会触发一堆验证器并很快变得丑陋。

标签: asp.net webforms


【解决方案1】:

使用 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');" />

【讨论】:

    【解决方案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);
    
    }
    
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 除非这个会被弹窗拦截器拦截
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多