English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementación de $.NET con jquery para descargar datos绑定 al hacer clic y poder descargar con un solo clic

Recientemente, en el sistema de gestión de capacitación, me encontré con un problema, se requiere hacer clic en los datos vinculados para descargar los archivos adjuntos especificados, y es una descarga en lote (los datos vinculados no son datagrid, ensamblados en el servidor).

La imagen del efecto es como sigue:

La idea general es:

1.jquery obtiene el id de los datos vinculados seleccionados, asigna este id al array, y luego asigna el valor del array a la variable oculta creada en la página

2.El servidor obtiene el valor de la variable oculta y lo recorre en el array para obtener la dirección de descarga del valor vinculado, luego paquete de descarga

Primero, el div en html se vincula con el servidor

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

 Lo siguiente es la selección de descarga de archivos, implementada utilizando jquery, y los valores se asignan a las variables ocultas en la página, el código es el siguiente:
 

// Selección de descarga de archivos
  $attach = $("#download-list");
  var arr = []
  $attach.on('click', '.no', function () {
    $(this).toggleClass('checked');//Configurar y quitar, seleccionar y no seleccionar
    if ($(this).hasClass('checked')) {
      var guid = $(this).children("#hidAttachGuid").val();
      arr.push(guid);//Agregar el guid al array arr
    }
    else
    {//Cancelar la selección
      var guid = $(this).children("#hidAttachGuid").val();
      var n = arr.indexOf(guid);
      if (n != -1)
      arr.splice(n, 1);//Quitar el guid especificado no seleccionado del array arr
    }
    $("[id$='arrayGuid']").val(arr);
  });

Debido a que se ensambla en el servidor, el botón también se ensambla en el servidor, el botón del servidor llama a js

<button type='button' class='one-download' onclick='download()'>Descargar con un clic</button>
function download() {
      $("#btnDownload").click();
    }

js desencadena el evento de ocultar el botón

<span style="display: none">
   <asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="确定" runat="server" />
    <input type="text" id="arrayGuid" runat="server"} />
</span>

Código de descarga de paquete en un solo clic en el backend:

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)
      {
        //Aquí está el ciclo para obtener todos los ids necesarios para descargar
      }
      Download(list, ""+lblCourseName.Text+"archivos adjuntos relacionados.rar");
    }
public void ZipFileByCode()
    {
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//A través de este formateador de nombres, se pueden realizar algunos procesamientos en los nombres de archivo. Por defecto, se crean automáticamente las carpetas correspondientes en el zip según la ruta del archivo.
        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)
    {
      //Empaquetar y descargar según el archivo seleccionado 
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//A través de este formateador de nombres, se pueden realizar algunos procesamientos en los nombres de archivo. Por defecto, se crean automáticamente las carpetas correspondientes en el zip según la ruta del archivo. 
        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();
    }

y el código en el mismo nivel que pageload

public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform
  {
    #region Miembro de INameTransform
    public string TransformDirectory(string name)
    {
      return null;
    }
    public string TransformFile(string name)
    {
      return Path.GetFileName(name);
    }
    #endregion
  }

Esto es todo el contenido de este artículo, espero que ayude a su aprendizaje y que todos apoyen a la tutorial de grito.

Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume la responsabilidad legal relevante. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w3Aviso: Al enviar un correo electrónico, por favor reemplace # con @ para denunciar y proporcionar evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará