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


像这样PostBackTrigger添加 一个asp:Button

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

或者,如果您想在代码隐藏中执行此操作,请执行此操作。

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