2012-04-11 61 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