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

jQuery配合.NET to implement click binding data and one-click download

Récemment, dans le système de gestion de la formation, j'ai rencontré un problème, où il est nécessaire de cliquer sur les données liées pour télécharger les pièces jointes spécifiées, et ce doit être un téléchargement en lot (les données liées ne sont pas un datagrid, assemblées en arrière-plan).

L'effet visuel suivant :

Généralement, l'idée :

1.jquery obtient l'id des données liées sélectionnées, assigne cette id à l'array, puis assigne la valeur de cet array aux variables cachées créées sur la page

2.L'arrière-plan récupère la valeur de la variable cachée, puis itère sur les valeurs de l'array, obtient l'adresse de téléchargement liée, puis télécharge en paquet

Tout d'abord, le div html est lié en arrière-plan

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

 Ensuite, le choix de téléchargement des pièces jointes, réalisé à l'aide de jquery, et les valeurs assignées aux variables cachées de la page, le code est le suivant :
 

// Choix de téléchargement des pièces jointes
  $attach = $("#download-list");
  var arr = []
  $attach.on('click', '.no', function () {
    $(this).toggleClass('checked');//Définir et supprimer, sélectionné et non sélectionné
    if ($(this).hasClass('checked')) {
      var guid = $(this).children("#hidAttachGuid").val();
      arr.push(guid);//Ajouter le guid à l'array arr
    }
    else
    {//Lorsque vous annulez la sélection
      var guid = $(this).children("#hidAttachGuid").val();
      var n = arr.indexOf(guid);
      if (n != -1)
      arr.splice(n, 1);//Retirer le guid non sélectionné de l'array arr
    }
    $("[id$='arrayGuid']").val(arr);
  });

C'est que le bouton est assemblé en arrière-plan, le bouton arrière-plan appelle le js

<button type='button' class='one-download' onclick='download()'>Télécharger en un clic</button>
function download() {
      $("#btnDownload").click();
    }

js déclenche l'événement de masquage du bouton

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

Code de téléchargement par lot en arrière-plan :

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)
      {
        //Voici les ids spécifiques à télécharger obtenus en boucle
      }
      Download(list, "",+lblCourseName.Text+"documents joints.rar");
    }
public void ZipFileByCode()
    {
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//Grâce à ce formatteur de nom, les noms de fichiers à l'intérieur peuvent être traités de certaines manières. Par défaut, il crée automatiquement des dossiers pertinents dans le zip en fonction du chemin du fichier.
        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)
    {
      //Téléchargement compressé en fonction des fichiers sélectionnés 
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//Grâce à ce formatteur de nom, les noms de fichiers à l'intérieur peuvent être traités de certaines manières. Par défaut, il crée automatiquement des dossiers pertinents dans le zip en fonction du chemin du fichier. 
        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();
    }

et le code au même niveau que pageload

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

Voici la totalité du contenu de cet article, j'espère qu'il vous sera utile dans vos études, et j'espère que vous soutiendrez également le tutoriel de cri.

Déclaration : le contenu de cet article est issu du réseau, propriété de l'auteur original, apporté par les utilisateurs d'Internet de manière volontaire et téléversé. Ce site ne détient pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

You may also like