2013-01-08 21 views
0

我用c#和asp.net開發。更新面板+ window.open + https

我有一些頁面更新面板。在此更新面板中,有一個按鈕可重定向到新窗口。這是通過調用window.open與代碼後面的scriptmanager來完成的。一切工作正常,直到我不使用https。如果我使用隧道與路由器有一個安全的線路,直到路由器,然後使用代理來訪問我的網頁,從更新面板中的按鈕調用window.open打開一個新的註冊卡,但在那裏我得到錯誤:找不到頁面。在URL中,我可以看到路由器沒有在路徑之前放置代理+ IP。如果我刪除了更新面板,則不會發生這種情況。使用Firebug,我可以看到,在更新面板中,我得到一個POST,並且在contentType中顯示text/plain。沒有更新面板有一個GET和響應contentType是文本/ 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> 
+2

所以,你有一個代碼或類似的東西? –

回答

0

明白了....

的信息,該scriptlanguage是,如果我使用代理服務器的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); 
}