最近在做培训管理系统中遇到一个问题,需求需点击绑定的数据,将指定的附件下载下来,并且是批量下载(绑定的数据非datagrid,后台拼接的绑定)。

效果图如下:

大体思路:

1.jquery得到选中的绑定数据的id,将这个id赋值到数组中,最后将这个数组的值赋值给页面中创建的隐藏变量

2.后台获取到隐藏变量的值,并将它循环数组取值,得到绑定值的下载地址,最后打包下载

  首先html中div根据后台绑定

  

 <div id="downloadInfo" runat="server"></div>

  

其次是下载附件的选择,利用jquery实现,并且将值赋值给页面中的隐藏变量,代码如下:

// 下载附件的选择
$attach = $("#download-list");
var arr = []
$attach.on('click', '.no', function () {
$(this).toggleClass('checked');//设置和移除,选中与不选中
if ($(this).hasClass('checked')) {
var guid = $(this).children("#hidAttachGuid").val();
arr.push(guid);//将guid添加到arr数组中 }
else
{//取消选中时
var guid = $(this).children("#hidAttachGuid").val();
var n = arr.indexOf(guid);
if (n != -1)
arr.splice(n, 1);//将指定不选中的guid移除arr数组
}
$("[id$='arrayGuid']").val(arr);
});

因为是后台拼接的,把button也拼接在了后台,后台button 调用js

<button type='button' class='one-download' onclick='download()'>一键下载</button>
function download() {
$("#btnDownload").click();
}

js触发隐藏button事件

<span style="display: none">
<asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="确定" runat="server" />
<input type="text" id="arrayGuid" runat="server" />
</span>

后台一键打包下载代码:

protected void btnDownload_Click(object sender, EventArgs e)
{
//ZipFileByCode();
string attachGuid = arrayGuid.Value;
string[] sArray = attachGuid.Split(','); List<string> list = new List<string>();
foreach (string i in sArray)
{
//这里是循环得到指定需要下载的所有id } Download(list, ""+lblCourseName.Text+"相关附件材料.rar");
}
 private void Download(IEnumerable<string> files, string zipFileName)
{
//根据所选文件打包下载
MemoryStream ms = new MemoryStream();
byte[] buffer = null;
using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
file.NameTransform = new MyNameTransfom();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。 foreach (var item in files)
{
file.Add(item);
}
//file.Add(Server.MapPath("../../BigFileUpLoadStorage/1.png"));
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = ;
ms.Read(buffer, , buffer.Length);
}
Response.AddHeader("content-disposition", "attachment;filename=" + zipFileName);
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
}

和pageload同层代码

 public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform
{ #region INameTransform 成员 public string TransformDirectory(string name)
{
return null;
} public string TransformFile(string name)
{
return Path.GetFileName(name);
} #endregion
}

添加组件:http://files.cnblogs.com/files/edisoner/ICSharpCode.SharpZipLib.rar

最新文章

  1. POJ 2251 题解
  2. Android 自定义Adapter 但listview 只显示第一条数据
  3. 03、AngularJs的模块与控制器
  4. web安全测试
  5. 二叉索引树BIT
  6. datagridview 列位置 设置顺序与加载显示顺序不一致
  7. XML结构文件的读写
  8. python3数据类型--数字
  9. 如何改变word修订模型下的视图
  10. 修改数据库用户名--CMD环境执行有效
  11. scratch写的图灵机
  12. c# 如何读取web.config中的内容(ConfigurationManager)
  13. dev Gridcontrol控件属性部分
  14. LeetCode算法题-Find the Difference(Java实现-五种解法)
  15. SQL BETWEEN 操作符
  16. JMeter—监听器(十二)
  17. JS发送短信验证码
  18. 【NPOI】WebAPI-使用NPOI导出Excel
  19. Python 传值和传址 copy/deepcopy
  20. C# 把string字符导出到txt文档方法

热门文章

  1. Anaconda安装python tensorflow 环境
  2. POJ:1833 按字典序找到下一个排列:
  3. Nginx+DNS负载均衡实现
  4. Java排序 - 不实用的几个排序算法 -- 睡眠排序、猴子排序、面条排序、珠排序
  5. UOJ#374. 【ZJOI2018】历史 贪心,LCT
  6. CodeForces 510C Fox And Names (拓扑排序)
  7. 【Linux】如何在Linux上安装使用SSH
  8. 执行JS
  9. Python的使用方法
  10. 错误解决记录------------rhel安装Mysql软件包依赖 mariadb组件