从包含在母版页更新面板中的用户控件下载文件

时间:2015-03-05 09:08:23

标签: c# asp.net

我有问题听起来很奇怪!我将从用户控件使用asp.net C#下载文件。这是我的网络表单的结构:

  1. 有一个Site.Master文件,其中内容占位符包含更新面板
  2. 有一个名为Library.ascx的用户控件显示书籍列表,以便用户可以下载他们喜欢的每一本书。 请注意,使用ListView网络控件显示图书。
  3. 上述用户控件用于同一网站的不同页面(想象一个包含不同级别且每个都有图书馆页面的学校网站)
  4. 下载文件的代码如下:

      protected void listViewBooks_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName != "Download") return;
    
            var books = _lib.GetBookInfo(Convert.ToInt32(e.CommandArgument));
            var filePath = string.Empty;
    
            foreach (var s in books)
            {
                filePath = s.FilePath;
            }
    
            var fileName = filePath.Substring(filePath.LastIndexOf(@"/", StringComparison.Ordinal) + 1);
            filePath = Server.MapPath("~/PDF/") + fileName;
    
            var file = new FileInfo(filePath);
    
            if (!file.Exists) return;
    
            Response.ClearContent();
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
            Response.AddHeader("Content-length", file.Length.ToString(CultureInfo.InvariantCulture));
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();
        }
    

    实际上,它走到 Response.End()之前的行,我不知道它为什么永远不会捕获事件的最后一个部分,即"}& #34;从用户的角度来看,没有任何反应!我已经搜索了几个小时的网络和类似的问题,但无法找到任何解决方案!例如,this linkethis one以及其他一些 任何帮助高度赞赏!

2 个答案:

答案 0 :(得分:0)

它永远不会到达最后一个括号,因为您使用的是Response.End()

  

End方法使Web服务器停止处理脚本并返回当前结果。不处理该文件的其余内容。

您无法从UpdatePanel下载文件。你必须触发一个完整的回发。

答案 1 :(得分:0)

最后,我昨天提出了这个问题。由于指定用户控件中的代码流我不得不在列表视图数据绑定事件中编写更新面板触发器代码,并且它只是解决了:)感谢各位帮助我的人。