jquery配合NETは指定バインドデータをクリックしてワンタッチでダウンロードできる

4527 ワード

最近、トレーニング管理システムで問題が発生しました.バインドされたデータをクリックし、指定された添付ファイルをダウンロードし、一括ダウンロードする必要があります(バインドされたデータはdatagridではなく、バックグラウンドの接続されたバインドです).
効果図は以下の通りです.
基本的な考え方:
1.jquery選択したバインドデータのidを取得し、このidを配列に割り当て、最後にこの配列の値をページで作成した非表示変数に割り当てる
2.バックグラウンドで隠し変数の値を取得し、それを循環配列して値を取り、バインド値のダウンロードアドレスを得て、最後にパッケージしてダウンロードする
まずhtmlの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
function download() {
            $("#btnDownload").click();
        }

jsはbuttonイベントの非表示をトリガーします
 

      

 

后台一键打包下载代码:

protected void btnDownload_Click(object sender, EventArgs e)
        {            //ZipFileByCode();
            string attachGuid = arrayGuid.Value;            string[] sArray = attachGuid.Split(',');

          
            List list = new List();            foreach (string i in sArray)
            {               //                id
 
            }

            Download(list, ""+lblCourseName.Text+"      .rar");
        }
 private void Download(IEnumerable 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