Sie müssen auf die gebundenen Daten klicken, um die angegebenen Anhänge herunterzuladen und sie stapelweise herunterzuladen (die gebundenen Daten sind kein Datagrid, sondern eine Hintergrund-Spleißbindung).
Das Rendering ist wie folgt:
Die allgemeine Idee:
1.jquery ruft die ID der ausgewählten Bindung ab Daten und weisen Sie diese ID einem Array zu und weisen Sie schließlich den Wert dieses Arrays der auf der Seite erstellten versteckten Variablen zu
2. Rufen Sie den Wert der versteckten Variablen im Hintergrund ab und durchlaufen Sie ihn in einer Schleife Array, um den gebundenen Wert zu erhalten. Laden Sie die Adresse herunter und verpacken und laden Sie sie schließlich herunter.
Zuerst wird das Div im HTML entsprechend dem Hintergrund gebunden
<div id="downloadInfo" runat="server"></div>
Zweitens wird die Auswahl zum Herunterladen von Anhängen mit jquery Implementiert und der ausgeblendeten Variablen auf der Seite zugewiesen. Der Code lautet wie folgt:
// 下载附件的选择 $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); });
Da es im Hintergrund gespleißt ist, wird die Schaltfläche auch gespleißt. Im Hintergrund ruft die Hintergrundschaltfläche js auf
<button type='button' class='one-download' onclick='download()'>一键下载</button> function download() { $("#btnDownload").click(); }
js löst das Ereignis „Versteckte Schaltfläche“ aus
<span style="display: none"> <asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="确定" runat="server" /> <input type="text" id="arrayGuid" runat="server" /> </span>
Ein-Klick-Paket-Download-Code im Hintergrund:
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) { //这里是循环得到指定需要下载的所有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(); }
Gleicher Ebenencode wie beim Seitenladen
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 }