jquery配合.NET實(shí)現(xiàn)點(diǎn)擊指定綁定數(shù)據(jù)并且能夠一鍵下載
最近在做培訓(xùn)管理系統(tǒng)中遇到一個(gè)問題,需求需點(diǎn)擊綁定的數(shù)據(jù),將指定的附件下載下來,并且是批量下載(綁定的數(shù)據(jù)非datagrid,后臺(tái)拼接的綁定)。
效果圖如下:

大體思路:
1.jquery得到選中的綁定數(shù)據(jù)的id,將這個(gè)id賦值到數(shù)組中,最后將這個(gè)數(shù)組的值賦值給頁面中創(chuàng)建的隱藏變量
2.后臺(tái)獲取到隱藏變量的值,并將它循環(huán)數(shù)組取值,得到綁定值的下載地址,最后打包下載
首先html中div根據(jù)后臺(tái)綁定
<div id="downloadInfo" runat="server"></div>
其次是下載附件的選擇,利用jquery實(shí)現(xiàn),并且將值賦值給頁面中的隱藏變量,代碼如下:
// 下載附件的選擇
$attach = $("#download-list");
var arr = []
$attach.on('click', '.no', function () {
$(this).toggleClass('checked');//設(shè)置和移除,選中與不選中
if ($(this).hasClass('checked')) {
var guid = $(this).children("#hidAttachGuid").val();
arr.push(guid);//將guid添加到arr數(shù)組中
}
else
{//取消選中時(shí)
var guid = $(this).children("#hidAttachGuid").val();
var n = arr.indexOf(guid);
if (n != -1)
arr.splice(n, 1);//將指定不選中的guid移除arr數(shù)組
}
$("[id$='arrayGuid']").val(arr);
});
因?yàn)槭呛笈_(tái)拼接的,把button也拼接在了后臺(tái),后臺(tái)button 調(diào)用js
<button type='button' class='one-download' onclick='download()'>一鍵下載</button>
function download() {
$("#btnDownload").click();
}
js觸發(fā)隱藏button事件
<span style="display: none">
<asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="確定" runat="server" />
<input type="text" id="arrayGuid" runat="server" />
</span>
后臺(tái)一鍵打包下載代碼:
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)
{
//這里是循環(huán)得到指定需要下載的所有id
}
Download(list, ""+lblCourseName.Text+"相關(guān)附件材料.rar");
}
public void ZipFileByCode()
{
MemoryStream ms = new MemoryStream();
byte[] buffer = null;
using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
file.NameTransform = new MyNameTransfom();//通過這個(gè)名稱格式化器,可以將里面的文件名進(jìn)行一些處理。默認(rèn)情況下,會(huì)自動(dòng)根據(jù)文件的路徑在zip中創(chuàng)建有關(guān)的文件夾。
file.Add(Server.MapPath("/Content/images/img01.jpg"));
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, buffer.Length);
}
Response.AddHeader("content-disposition", "attachment;filename=test.zip");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
}
private void Download(IEnumerable<string> files, string zipFileName)
{
//根據(jù)所選文件打包下載
MemoryStream ms = new MemoryStream();
byte[] buffer = null;
using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
file.NameTransform = new MyNameTransfom();//通過這個(gè)名稱格式化器,可以將里面的文件名進(jìn)行一些處理。默認(rèn)情況下,會(huì)自動(dòng)根據(jù)文件的路徑在zip中創(chuàng)建有關(guān)的文件夾。
foreach (var item in files)
{
file.Add(item);
}
//file.Add(Server.MapPath("../../BigFileUpLoadStorage/1.png"));
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, 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
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jquery checkbox的相關(guān)操作總結(jié)
這篇文章主要介紹了jquery checkbox的相關(guān)操作總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-10
jQuery Easyui datagrid連續(xù)發(fā)送兩次請(qǐng)求問題
用上述方式動(dòng)態(tài)加載datagrid的數(shù)據(jù)時(shí),通過net監(jiān)聽,發(fā)現(xiàn)調(diào)用了兩遍XX方法,目前的解決方案是,將url放到datagrid初始化的時(shí)候執(zhí)行2016-12-12
ajax jquery實(shí)現(xiàn)頁面某一個(gè)div的刷新效果
這篇文章主要給大家介紹了關(guān)于ajax jquery實(shí)現(xiàn)頁面某一個(gè)div的刷新效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
利用jQuery的deferred對(duì)象實(shí)現(xiàn)異步按順序加載JS文件
如果你現(xiàn)在對(duì)jQuery中的deferred還不了解,jQuery的deferred對(duì)象詳解一文接下來介紹deferred對(duì)象如何實(shí)現(xiàn)異步順序加載JS文件,感興趣的你可以參考下哈2013-03-03
解決同一頁面中兩個(gè)iframe互相調(diào)用jquery,js函數(shù)的方法
本文主要介紹了解決同一頁面中兩個(gè)iframe互相調(diào)用jquery,js函數(shù)的方法,具有很好的參考價(jià)值,需要的朋友可以看下2016-12-12
iframe里面的元素觸發(fā)父窗口元素事件的jquery代碼
這篇文章主要介紹了jquery:iframe里面的元素怎樣觸發(fā)父窗口元素的事件,很簡單,但很實(shí)用,需要的朋友可以看看2014-10-10
jQuery中的on與bind綁定事件區(qū)別實(shí)例詳解
bind與on的區(qū)別就在于–事件冒泡,關(guān)于jquery中的on與bind綁定事件的區(qū)別通過本文給大家實(shí)例講解,需要的朋友參考下吧2017-02-02

