0

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

我有一些带有更新面板的页面。在此更新面板中,有一个重定向到新窗口的按钮。这是通过在后面的代码中使用脚本管理器调用 window.open 来完成的。在我不使用 https 之前一切正常。如果我使用带路由器的隧道连接到路由器,然后使用代理访问我的网页,则从更新面板中的按钮调用的 window.open 会打开一个新的注册卡,但我得到了错误:找不到页面。在网址中我可以看到路由器没有将代理+IP放在路径之前。如果我删除更新面板,则不会发生这种情况。使用 Firebug,我可以看到使用更新面板我得到了一个 POST,并且在 resonse 中,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>
4

1 回答 1

0

知道了....

如果我使用代理,脚本语言是 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);
}
于 2013-01-09T10:10:11.470 回答