c# - 从 UpdatePanel 内的 GridView 中的链接下载文件失败

标签 c# asp.net gridview file-upload webforms

我正在尝试通过 asp.net 中的 FileUpload 控件(即 file.Docx 等)将文件(图像、word、pdf 或任何类型)保存在数据库中。然后我希望将文件名显示为 GridView 中的链接,以便当用户单击它时,将下载该文件。

我什么都试过了。在调试中它什么也没显示。它到达 Response.End 的末尾但未下载任何内容。

GridView :

<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();
}

文件夹结构:

enter image description here

最佳答案

尝试以下操作, 还请向我们提供有关您网页的更多信息。另外,如果您使用的是 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);

上面的代码将注册 LinkBut​​ton 以引起完全回发,这将允许下载成功,这同样适用于在更新面板中上传文件时

关于c# - 从 UpdatePanel 内的 GridView 中的链接下载文件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255777/

相关文章:

c# - 如何判断app.config文件是否存在

c# - 我怎么能模拟这段代码?

javascript - jQuery tablesorter 外部日期范围过滤器

asp.net - 从父 ASP.NET 页面处理用户控件中 LinkBut​​ton 的单击事件

c# - 如何保持 Jquery gridview 悬停菜单可见

即使在设计模式下,带计时器的 C# 用户控件也会启动

c# - MySQL - 更新我正在选择的相同记录

c# - Telerik Radgrid 导出文件名

c# - 将类的复杂数据源绑定(bind)到 GridView

c# - 如何使用 C# 在嵌套网格中获取按钮查找控件值