更新面板+窗口.打开+ https

Update Panel + window.open + https

本文关键字:打开 https 窗口 更新      更新时间:2023-09-26

我正在使用c#和asp.net进行开发。

我有一些带有更新面板的页面。在此更新面板中有一个按钮,可重定向到新窗口。这是通过调用窗口来完成的。打开后面代码中的scriptmanager。一切都很好,直到我不使用https。如果我使用隧道与路由器有一个安全的线路,直到路由器,然后使用代理访问我的网页,窗口。从更新面板中的按钮打开一个新的注册卡,但在那里我得到错误:页面未找到。在url中,我可以看到路由器没有把代理+IP放在路径之前。如果我删除更新面板,就不会发生这种情况。使用Firebug,我可以看到,在更新面板中,我得到一个POST,在响应中,contentType是text/plain。没有更新面板,有一个GET,响应contentType是text/html。那么,在不删除更新面板的情况下,我该如何运行这个程序呢?

这个工作很好,直到我不使用https在我的代理:

protected void btnPrint_Click(object sender, EventArgs e)
{
     url = "~/Gui/Report/ReportViewer.aspx?ReportName=CustomerReport";
     Page page = (Page)HttpContext.Current.Handler;
     if (page == null) {
         Redirect(url);
     }
     url = page.ResolveUrl(url);
     string script = @"window.open(""{0}"");";
     script = String.Format(script, url);
     ScriptManager.RegisterStartupScript(page,
         typeof(Page),
         "Redirect",
         script,
         true);
}
<asp:UpdatePanel ID="UpdatePanel" runat="server">
    <ContentTemplate>
         <dx:ASPxButton runat="server" ID="btnPrint"
               Text="print" OnClick="btnPrint_Click">
         </dx:ASPxButton>
    </ContentTemplate>
</asp:UpdatePanel>

知道了....

如果我使用代理,则scriptlanguage是javascript的信息丢失(奇怪…?!?!)。如果我在自己的脚本标签上添加属性"language='javascript'",那么一切都很好。有人能告诉我为什么这些信息丢失了吗?

这里是新的代码:

protected void btnPrint_Click(object sender, EventArgs e)
{
 url = "~/Gui/Report/ReportViewer.aspx?ReportName=CustomerReport";
 Page page = (Page)HttpContext.Current.Handler;
 url = page.ResolveUrl(url);
 string script = "window.open('" + url + "');";
 System.Text.StringBuilder sb = new System.Text.StringBuilder();
 sb.Append("<script language='javascript'>");
 sb.Append(script);
 sb.Append("</script>");
 ScriptManager.RegisterStartupScript(page,
     typeof(Page),
     "Redirect",
     script,
     false);
}