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

JQuery + .NET implementam clique em dados vinculados específicos e download em um clique

Recentemente, ao trabalhar no sistema de gerenciamento de treinamento, encontrei um problema, a necessidade de clicar nos dados vinculados, baixar o anexo especificado e é download em lote (os dados vinculados não são datagrid, montados no backend).

A imagem do efeito é a seguinte:

O grande pensamento é:

1.jQuery obtém o id de dados vinculados selecionados, atribui esse id ao array, e, finalmente, atribui o valor do array ao variável oculta criada na página

2.O backend obtem o valor da variável oculta e o loop do array de valores obtidos, obtendo o endereço de download vinculado, e, finalmente, baixando o pacote

Primeiro, o div no html é vinculado no backend

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

 Em seguida, a seleção de download de anexos, implementada com jQuery, e o valor atribuído a variáveis ocultas na página, o código é o seguinte:
 

// Selecção de download de anexos
  $attach = $("#download-list");
  var arr = []
  $attach.on('click', '.no', function () {
    $(this).toggleClass('checked');//Definir e remover, selecionado e não selecionado
    if ($(this).hasClass('checked')) {
      var guid = $(this).children("#hidAttachGuid").val();
      arr.push(guid);//Adicionar guid ao array arr
    }
    else
    {//ao cancelar a seleção
      var guid = $(this).children("#hidAttachGuid").val();
      var n = arr.indexOf(guid);
      if (n != -1)
      arr.splice(n, 1);//Remover guids especificamente não selecionados do array arr
    }
    $("[id$='arrayGuid']").val(arr);
  });

Porque é montado no backend, o botão também é montado no backend, chamando o js do botão no backend

<button type='button' class='one-download' onclick='download()'>Download um clique</button>
function download() {
      $("#btnDownload").click();
    }

js aciona evento de ocultar botão

<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 download de empacotamento em um clique no 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)
      {
        //Aqui está o loop obtendo todos os ids necessários para download
      }
      Download(list, ""+lblCourseName.Text+"arquivo_anexo_materials.rar");
    }
public void ZipFileByCode()
    {
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//Através deste formatador de nome, pode-se processar os nomes dos arquivos dentro. Por padrão, será criado automaticamente o diretório correspondente no zip com base no caminho do arquivo.
        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)
    {
      //Empacotamento e download com base no arquivo selecionado 
      MemoryStream ms = new MemoryStream();
      byte[] buffer = null;
      using (ZipFile file = ZipFile.Create(ms))
      {
        file.BeginUpdate();
        file.NameTransform = new MyNameTransfom();//Através deste formatador de nome, pode-se processar os nomes dos arquivos dentro. Por padrão, será criado automaticamente o diretório correspondente no zip com base no caminho do arquivo. 
        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();
    }

e código na mesma camada que pageload

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

Isso é tudo o que há no artigo. Espero que ajude no seu aprendizado e que você apoie o tutorial Yell.

Declaração: O conteúdo deste artigo foi extraído da internet, pertence ao respectivo proprietário. O conteúdo foi contribuído e carregado voluntariamente pelos usuários da internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w.3Aviso: Este conteúdo foi extraído da internet, pertence ao respectivo proprietário. O conteúdo foi contribuído e carregado voluntariamente pelos usuários da internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w, fornecendo provas relevantes. Se confirmado, o conteúdo suspeito será imediatamente removido.

Você também pode gostar