2012-04-11 55 views
0

我正在顯示一個包含按鈕的面板。當用戶點擊按鈕時,它會進行一些處理,然後爲用戶下載一個文件。代碼如下所示:Asp.net - 下載文件後無法更改面板的可見性

private void OpenForm(string content, string formName) 
    { 
     Byte[] bytes = System.Text.Encoding.Default.GetBytes(content); 

     this.Response.AppendHeader("Content-Type", "application/msword"); 
     this.Response.AppendHeader("Content-Length", bytes.Length.ToString()); 
     this.Response.AppendHeader("Content-disposition", "attachment; filename=" + formName); 
     this.Response.BinaryWrite(bytes); 

     ReturnToMemberScreen(); 

     this.Response.Flush(); 
     this.Context.ApplicationInstance.CompleteRequest(); 
    } 

在函數ReturnToMemberScreen中,我改變了一些面板的可見性。下面是函數:

private void ReturnToMemberScreen() 
    { 
     this.panelMappings.Visible = false; 
     this.MemberEditPNL.Visible = true; 
    } 

我可以下載該文件完全沒有問題,我的問題是,我的面板的可見性不會改變。這與寫我的回覆有關嗎?

回答

0

更仔細地觀察,我認爲當我這樣做,我不能對網頁進行任何修改,因爲我改變從「text/html的」以應用程序/ msword響應的內容類型:

this.Response.AppendHeader("Content-Type", "application/msword"); 

當我結果時,我正在使用CSS和Javascript進行所有更改。默認情況下,我把我的面板來顯示或隱藏使用CSS:

.hide  
{   
    display:none;  
} 

.show 
{ 
    display:block; 
} 

然後,我設置的按鈕,下面的JavaScript函數的OnClientClick改變顯示:

function visible() 
{ 
    document.getElementById('<%=panelForms.ClientID %>').style.display = 'none'; 
    document.getElementById('<%=MemberEditPNL.ClientID %>').style.display = 'block'; 
} 
1

不要使用Visible = false,因爲這會導致元素不被渲染。請嘗試:

// To hide: 
Panel1.Style.Add("display", "none"); 
// To show: 
Panel1.Style.Add("display", "block"); 
+1

嘗試這樣做,它沒有解決問題。 – 2012-04-11 18:32:44

+0

您是否嘗試過設置使內部面板可見,然後外部面板? – coder 2012-04-11 18:36:41

+0

試過這個問題仍然存在 – 2012-04-11 18:57:30

0

您是否在Page_Load事件中設置面板的可見性?如果是這樣,並且您沒有在事件中處理回發,則可見性設置可能會覆蓋ReturnToMemberScreen中的設置。

+0

不,我沒有在Page_Load中設置它們。我已經通過代碼進行了調試,除了ReturnToMemberScreen函數之外,我沒有對面板的可見性做任何事情。 – 2012-04-11 18:32:30