最近在做培训管理系统中遇到一个问题,需求需点击绑定的数据,将指定的附件下载下来,并且是批量下载(绑定的数据非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");
}
public void ZipFileByCode()
{
MemoryStream ms = new MemoryStream();










