我正在使用c#和asp.net进行开发。
我有一些包含更新面板的页面。在此更新面板中,有一个重定向到新窗口的按钮。这是通过在后面的代码中使用scriptmanager调用window.open来完成的。一切正常,直到我不使用https。如果我使用路由器与路由器建立安全线路直到路由器然后使用代理访问我的网页,则从更新面板中的按钮调用的window.open打开一个新的注册卡,但是我得到了错误:找不到页面。在网址中,我可以看到路由器没有在路径之前放置代理+ 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>
答案 0 :(得分:0)
得到它......
如果我使用代理,那么脚本语言javascript的信息就会丢失(奇怪......?!?!)。 如果我自己构建脚本标签并添加attribut“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);
}