Asp.net 为什么下载一个不工作的文件保存在模型弹出窗口中?
我正在打开一个面板,上面有这样的代码Asp.net 为什么下载一个不工作的文件保存在模型弹出窗口中?,asp.net,ajaxcontroltoolkit,Asp.net,Ajaxcontroltoolkit,我正在打开一个面板,上面有这样的代码 <td rowspan="2"> <br /> <asp:UpdatePanel ID="updatePnl" runat="server"> <ContentTemplate> <asp:
<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.");
}
}
}
<Triggers>
<asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
在点击按钮时,我打开了一个要下载的文件,但下载的文件并没有出现,因为它并没有保存在面板中,而是通过模型弹出窗口打开。
现在,当它放置在面板中时,将通过模型弹出窗口打开。它不起作用。
原因是什么?您使用的UpdatePanel,期望非常具体的数据实际等待一个结构,并带有发回的结果,这些数据在javascript上用于更新其内容。你所做的就是完全破坏这些数据,你仍然希望工作。这无法工作,您会从页面、updatepanel中收到一个javascript错误。换言之,更新面板从您那里获取一些不知道如何处理的数据。您使用的UpdatePanel,期望非常具体的数据实际等待具有发回结果的结构,这些数据在javascript上用于更新其内容。你所做的就是完全破坏这些数据,你仍然希望工作。这无法工作,您会从页面、updatepanel中收到一个javascript错误。换言之,更新面板从您那里获取一些不知道如何处理的数据。更新面板中的操作不会改变整个响应,只是页面的一部分。所以你不能期望得到回应。写信去工作吧。另一种方法是使按钮强制执行完全回发 向asp:按钮添加一个PostBackTrigger,如下所示
<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.");
}
}
}
<Triggers>
<asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
UpdatePanel中的操作不会改变整个响应,只是页面的一部分。所以你不能期望得到回应。写信去工作吧。另一种方法是使按钮强制执行完全回发
向asp:按钮添加一个PostBackTrigger,如下所示
<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.");
}
}
}
<Triggers>
<asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
因此,如何使其正确,文件被创建,但“保存”对话框从未出现在客户端上。@NearketToDotnet是的,因为您有一个UpdatePanel将其扭曲。@NearketToDotnet我想说,这种方式也不是好的做法,是一种简单的解决方案,但不是asp.net页面的正确解决方案。更好的解决方案是使用句柄发送文件,您只需使用正确的url参数创建指向该句柄的链接。@NeareorToDotnet和此Response.WriteThis文件不存在。;你有没有看过它要写什么,写在哪里?做个测试看看。也许在这一页的末尾,也许在上面。。。但是它将是不可读的,除非你的页面是一个空白的白色。因此,如何使它正确,文件会被创建,但“保存”对话框永远不会出现在客户端上。@NearketToDotnet是的,因为你有一个UpdatePanel来扭曲它。@NearketToDotnet我想说,这种方式也不是很好的做法,是一个简单的解决方案,但这不是asp.net页面的正确解决方案。更好的解决方案是使用句柄发送文件,您只需使用正确的url参数创建指向该句柄的链接。@NeareorToDotnet和此Response.WriteThis文件不存在。;你有没有看过它要写什么,写在哪里?做个测试看看。也许在这一页的末尾,也许在上面。。。但是它将是不可读的,除非你的页面是一个空白的白色。文件被创建,但保存对话框从未出现在客户端上。文件被创建,但保存对话框从未出现在客户端上。是的,它确实工作,但我的问题是,在,当我没有定义触发器时,断点被击中了。@NearketToDotnet:第一行用简单的术语解释了原因。“不是吗?”亚里士多德:对不起。我认为是有人点击了“快乐”:是的,它确实有效,但我的问题是我必须定义什么触发器,而当我没有定义触发器时,断点被击中了。@NearketToDotnet:第一行用简单的术语解释了原因。“不是吗?”亚里士多德:对不起。我觉得是有人在开玩笑: