我正在打开一些面板,其中有一些像这样的代码
<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.");
}
}
}
然后点击按钮我打开一个要下载的文件但是没有出现下载,因为它没有保存在面板中,而是通过模型弹出打开。 现在,当它被放置在一个通过模型弹出窗口打开的面板中。它不起作用。 是什么原因?
答案 0 :(得分:2)
您使用的UpdatePanel,期望从回发中获得非常具体的数据(实际上等待带有结果的结构),并且此数据用于javascript以更新其内容。你所做的就是彻底打破这些数据,你仍然希望工作。这不起作用,您从更新面板页面收到javascript错误。换句话说,更新面板会从您那里获取一些不知道如何处理它们的数据。
答案 1 :(得分:2)
UpdatePanel
内的操作不会更改整个Response
,只是页面的一部分。所以你不能指望Response.Write
能够工作。另一种方法是使按钮强制为PostBack
向
PostBackTrigger
添加asp:Button
<Triggers>
<asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
或者如果您想在代码隐藏中执行此操作,请执行此操作。
ScriptManager.GetCurrent(Page).RegisterPostBackControl(lnkYurLevel);