>  기사  >  php教程  >  jquery는 .NET과 협력하여 클릭하여 지정하는 바인딩 데이터를 실현하고 한 번의 클릭으로 다운로드할 수 있습니다.

jquery는 .NET과 협력하여 클릭하여 지정하는 바인딩 데이터를 실현하고 한 번의 클릭으로 다운로드할 수 있습니다.

高洛峰
高洛峰원래의
2016-12-08 14:14:151162검색

지정된 첨부파일을 다운로드하려면 바인딩된 데이터를 클릭해야 하며 일괄적으로 다운로드해야 합니다(바인딩된 데이터는 데이터그리드, 백그라운드 스플라이싱 바인딩이 아닙니다).

렌더링은 다음과 같습니다.

jquery는 .NET과 협력하여 클릭하여 지정하는 바인딩 데이터를 실현하고 한 번의 클릭으로 다운로드할 수 있습니다.

일반 아이디어:

1.jquery는 선택한 바인딩의 ID를 가져옵니다. 이 ID를 배열에 할당하고 마지막으로

페이지에서 생성된 숨겨진 변수에 이 배열의 값을 할당합니다. 2. 백그라운드에서 숨겨진 변수의 값을 가져와서 루프를 통해 반복합니다. 바운드 값을 얻기 위한 배열 주소를 다운로드하고 마지막으로 패키징하여 다운로드

먼저 html의 div를 배경에 따라 바인딩합니다

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

둘째, 첨부 파일 다운로드는 jquery를 사용하여 선택하고 페이지의 숨겨진 변수에 값을 할당합니다.

// 下载附件的选择
  $attach = $("#download-list");
  var arr = []
  $attach.on(&#39;click&#39;, &#39;.no&#39;, function () {
    $(this).toggleClass(&#39;checked&#39;);//设置和移除,选中与不选中
    if ($(this).hasClass(&#39;checked&#39;)) {
      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$=&#39;arrayGuid&#39;]").val(arr);
  });

백그라운드에 쪼개져있으니까 버튼도 쪼개짐 백그라운드에서 백그라운드버튼이 js를 호출함

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

js가 숨겨진 버튼 이벤트를 트리거합니다

<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(&#39;,&#39;);
 
      
      List<string> list = new List<string>();
      foreach (string i in sArray)
      {
        //这里是循环得到指定需要下载的所有id
  
      }
 
      Download(list, ""+lblCourseName.Text+"相关附件材料.rar");
    }

public void ZipFileByCode()
    {
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
 
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
 
        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)
    {
      //根据所选文件打包下载
      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", "attachment;filename=" + zipFileName);
      Response.BinaryWrite(buffer);
      Response.Flush();
      Response.End();
    }

페이지로드와 동일한 레이어 코드

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
  }


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.