C# 从母版页更新面板中包装的用户控件下载文件

C# 从母版页更新面板中包装的用户控件下载文件,c#,asp.net,C#,Asp.net,我有个问题,听起来很奇怪!我将使用asp.net C#从用户控件下载一个文件。以下是我的web表单的结构: 有一个Site.Master文件,其中内容占位符用更新面板包装 有一个名为Library.ascx的用户控件,它显示图书列表,以便用户可以下载他们喜欢的每一本书请注意,书籍是使用ListView web控件显示的。 上述用户控件用于同一网站的不同页面(想象一个包含不同级别的学校网站,每个级别都有一个图书馆页面) 下载该文件的代码如下所示: protected void listView

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

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

      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()之前出现,我不知道为什么它从来没有捕捉到事件的最后一个括号,即“}”,从用户的角度来看,什么都没有发生!我在网上和类似的问题上搜索了几个小时,但找不到任何解决办法!例如,或其他一些
    非常感谢您的帮助

    它永远不会到达最后一个括号,因为您正在使用:

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


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

    最后,我讨论了我昨天提出的问题。由于指定用户控件中的代码流,我不得不在列表视图数据绑定事件中编写更新面板触发代码,它只是简单地解决了:)感谢大家在这方面的帮助。

    这不是更好的解决方案吗?实际上,我没有通用web处理程序的经验,但感谢链接,也许这对我有帮助。事实上,我也处理了触发器,虽然没有包含在我发送的代码中,但没有任何更改。我不知道。你在回邮问题上说的是对的,正如我在自己的回答中提到的,这是错的,但我更喜欢以你为答案