0

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

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

我可以很好地下载文件,我的问题是我的面板的可见性没有改变。它与像我一样写到响应中有关吗?

4

3 回答 3

1

不要使用 Visible = false ,因为这会导致元素不被渲染。尝试:

// To hide:
 Panel1.Style.Add("display", "none");
// To show:
 Panel1.Style.Add("display", "block");
于 2012-04-11T17:08:46.003 回答
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';
}
于 2012-04-11T19:31:23.587 回答
0

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

于 2012-04-11T17:10:28.747 回答