从 UpdatePanel 内的 GridView 中的 link 下载文件失败
Downloading a file from a link in a GridView inside an UpdatePanel fails
我正在尝试通过 asp.net 中的 FileUpload 控件(即 file.Docx 等).然后我希望在 GridView 中将文件名显示为 link,这样当用户单击它时,文件就会被下载。
我什么都试过了。在调试中它什么也没显示。它到达 Response.End 的末尾,但未下载任何内容。
网格视图:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnLinkDownloadTender" runat="server" Text='<%# Eval("UploadedTenderPath") %>'CommandArgument='<%# Eval("UploadedTenderPath") %>' OnClick="DownloadTender"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
上传:
protected void UploadTender()
{
try
{
if (FileUpload1.HasFile)
{
string fileName = Path.GetFileName(FileUpload1.FileName);
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/UploadedTenders/") + fileName);
HdnFieldUploadedTender.Value = fileName;
ResultLabel.ResultLabelAttributes("Tender Uploaded", ProjectUserControls.Enums.ResultLabel_Color.Red);
ResultPanel.Controls.Add(ResultLabel);
}
else
{
ResultLabel.ResultLabelAttributes("No file specified", ProjectUserControls.Enums.ResultLabel_Color.Red);
ResultPanel.Controls.Add(ResultLabel);
}
}
}
下载:
protected void DownloadTender(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath) );
Response.Write(filePath);
Response.End();
}
文件夹结构:
将AppendHeader
替换为AddHeader
string fullFilePath = Server.MapPath("~/UploadedTenders/") + filePath;
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fullFilePath );
Response.ContentType = ContentType;
Response.TransmitFile(fullFilePath);
尝试以下操作,
还请向我们提供有关您网页的更多信息。另外,如果您使用的是 chrome,请检查 chrome 是否阻止了它
var fileInfo = new FileInfo(filePath);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString(CultureInfo.InvariantCulture));
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(File.ReadAllBytes(fileInfo.FullName));
Response.Flush();
Response.End();
编辑:
在您的 gridview Row Databound 添加以下内容
LinkButton lb = e.Row.FindControl("btnLinkDownloadTender") as LinkButton;
if (lb != null)
ScriptManager.GetCurrent(this).RegisterPostBackControl(lb);
以上代码将注册 LinkButton 以引起完整回发,这将允许下载成功,在更新面板中上传文件时同样适用
试试这个:
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment; filename=" + file_name);
Response.WriteFile(filePath);
Response.Flush();
Response.End();
我正在尝试通过 asp.net 中的 FileUpload 控件(即 file.Docx 等).然后我希望在 GridView 中将文件名显示为 link,这样当用户单击它时,文件就会被下载。
我什么都试过了。在调试中它什么也没显示。它到达 Response.End 的末尾,但未下载任何内容。
网格视图:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnLinkDownloadTender" runat="server" Text='<%# Eval("UploadedTenderPath") %>'CommandArgument='<%# Eval("UploadedTenderPath") %>' OnClick="DownloadTender"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
上传:
protected void UploadTender()
{
try
{
if (FileUpload1.HasFile)
{
string fileName = Path.GetFileName(FileUpload1.FileName);
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/UploadedTenders/") + fileName);
HdnFieldUploadedTender.Value = fileName;
ResultLabel.ResultLabelAttributes("Tender Uploaded", ProjectUserControls.Enums.ResultLabel_Color.Red);
ResultPanel.Controls.Add(ResultLabel);
}
else
{
ResultLabel.ResultLabelAttributes("No file specified", ProjectUserControls.Enums.ResultLabel_Color.Red);
ResultPanel.Controls.Add(ResultLabel);
}
}
}
下载:
protected void DownloadTender(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath) );
Response.Write(filePath);
Response.End();
}
文件夹结构:
将AppendHeader
替换为AddHeader
string fullFilePath = Server.MapPath("~/UploadedTenders/") + filePath;
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fullFilePath );
Response.ContentType = ContentType;
Response.TransmitFile(fullFilePath);
尝试以下操作, 还请向我们提供有关您网页的更多信息。另外,如果您使用的是 chrome,请检查 chrome 是否阻止了它
var fileInfo = new FileInfo(filePath);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString(CultureInfo.InvariantCulture));
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(File.ReadAllBytes(fileInfo.FullName));
Response.Flush();
Response.End();
编辑: 在您的 gridview Row Databound 添加以下内容
LinkButton lb = e.Row.FindControl("btnLinkDownloadTender") as LinkButton;
if (lb != null)
ScriptManager.GetCurrent(this).RegisterPostBackControl(lb);
以上代码将注册 LinkButton 以引起完整回发,这将允许下载成功,在更新面板中上传文件时同样适用
试试这个:
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment; filename=" + file_name);
Response.WriteFile(filePath);
Response.Flush();
Response.End();