Asp.net - 下载文件后无法更改面板的可见性

时间:2012-04-11 17:05:10

标签: c# asp.net download panel response

我正在显示一个包含按钮的面板。当用户单击该按钮时,它会进行一些处理,然后为该用户下载文件。其代码如下所示:

    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;
    }

我可以完美地下载文件,我的问题是我的面板的可见性不会改变。是否与我一样写回信有什么关系?

3 个答案:

答案 0 :(得分:1)

不要使用Visible = false,因为这会导致元素无法呈现。尝试:

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

答案 1 :(得分:0)

您是否在Page_Load事件中设置了面板的可见性?如果是这样,并且如果您未在事件中处理回发,则可见性设置可能会覆盖ReturnToMemberScreen中的设置。

答案 2 :(得分:0)

仔细观察,我想我无法对页面进行任何更改,因为我在执行此操作时将响应的Content-Type从“text / html”更改为application / msword:

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

结果,我正在使用CSS和Javascript进行所有更改。默认情况下,我将面板设置为使用css显示或隐藏:

.hide     
{         
    display:none;     
}

.show
{
    display:block;
}

然后我将按钮的OnClientClick设置为以下Javascript函数以更改显示:

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