用下面的方法能实现下载功能。不过我在后面加跳转页面或者让另一个按钮
this.Button2.Enabled = true; 也会失败。有什么解决方法么?
在线急等。。protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.txt");//路径            //以字符流的形式下载文件
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
            this.Button2.Enabled = true; 
    }

解决方案 »

  1.   

    不能这么做,学习下http协议吧。也许你拷贝了很多次,屡试不爽,但是你真的明白
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
    这三行到底做了什么么?
      

  2.   

    Response.End的作用是 将当前所有缓冲的输出发送到客户端,停止该页的执行,也就是说response.End之后的代码是不会执行的,所以你在这句后面写 this.Button2.Enabled = true 自然就不会起作用
    你要实现页面跳转,可以把页面跳转的代码写在Response.End这句的前面,就能成功执行了
      

  3.   

    这个不行。我试过了。我即使在这个点击事件最前面写this.Button2.Enabled = true 也会没效果。估计像1楼说的是HTTP协议的问题,不太懂。1楼只顾得瑟。不顾解答。纠结。。
      

  4.   

    下载已经是 流模式了,不能再执行js,html等的另外,你也不能得到文件什么时候下载完的
      

  5.   

    我是想实现先下载后评分的效果。本来想下载后跳转评分页面。那像CSDN的这种下载。比如先跳出“下载该资料将扣除1分,\n\n重复下载不会重复扣分。”说明他有对数据库记录下载记录。那请问要怎么实现。因为下载完后就不能操作数据库了。
      

  6.   

    那些都是下载之前提示的,点确定,就操作数据库,然后输出下载资源的url