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

Page_Loadイベントでパネルの可視性を設定しますか?その場合、およびイベント内でポストバックを処理していない場合は、可視性の設定がReturnToMemberScreenの設定を上書きしている可能性があります。

于 2012-04-11T17:10:28.747 に答える
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 に答える