jquery配合.NET實現點擊指定綁定數據並且能夠一鍵下載

最近在做培訓管理系統中遇到一個問題,需求需點擊綁定的數據,將指定的附件下載下來,並且是批量下載(綁定的數據非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 = 0;
                ms.Read(buffer, 0, buffer.Length);
            }
            Response.AddHeader("content-disposition", "p_w_upload;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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章