2

私はこのようないくつかのコードを持ついくつかのパネルを開いています

 <td rowspan="2">
                        <br />
                        <asp:UpdatePanel ID="updatePnl" runat="server">
                            <ContentTemplate>
                                <asp:LinkButton ID="lnkYurLevel" runat="server" ForeColor="#009999" Text="What are my next steps?"
                                    Font-Size="Medium" OnClick="lnkYurLevel_Click"></asp:LinkButton>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </td>

 protected void lnkYurLevel_Click(object sender, EventArgs e)
    {
        if (lblFileName.Text != "")
        {
            string path = Server.MapPath(@"~\downloads\" + lblFileName.Text);
            System.IO.FileInfo file = new System.IO.FileInfo(path);
            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);
                Response.End();
            }
            else
            {
                Response.Write("This file does not exist.");
            }
        }

    }

ボタンをクリックすると、ダウンロードするファイルを開いていますが、モデルのポップアップで開くパネルに保持されていないときに機能していたため、ダウンロードは表示されません。これで、モデルポップアップを介して開くパネルに配置されます。動作しません。理由は何ですか?

4

2 に答える 2

2

使用する UpdatePanel は、ポストバックから非常に具体的なデータ (実際には構造体で結果を待つ) を期待しており、このデータは JavaScript で使用されてコンテンツを更新します。あなたがしていることは、そのデータを完全に破壊することであり、それでも機能することを期待しています. これは機能せず、更新パネルのページから JavaScript エラーが発生します。言い換えれば、更新パネルは、何をすべきかわからないデータを取得します。

于 2012-05-28T12:13:15.997 に答える
2

内のアクションUpdatePanelは全体Responseではなく、ページの一部のみを変更します。そのため、仕事は期待できませんResponse.Write。別の方法は、ボタンを強制的に完全にすることですPostBack


このように aPostBackTriggerを 追加しますasp:Button

<Triggers>
    <asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>

または、分離コードでそれを行いたい場合は、これを行います。

ScriptManager.GetCurrent(Page).RegisterPostBackControl(lnkYurLevel);
于 2012-05-28T12:17:08.067 に答える