2016-03-22 14 views
0

Ich habe eine Webseite zum Anzeigen der Informationen über Dateien (wie ein Name und ein Bild) der Datei auf der Grundlage der (Abfragezeichenfolge) ((die Dateien bereits gespeichert werden auf dem Server))So laden Sie eine Datei in asp.net mit C#

die Einzelheiten dieser Dateien angezeigt werden innerhalb (Datenliste) .. wie eine Befehlsschaltfläche zum creat die Datei herunterladen, wenn sie,

void FillLessons() 
{ 
    SqlConnection cn = new SqlConnection(cs); 
    cn.Open(); 
    SqlCommand cmd = new SqlCommand(); 


    string sqlStatment = "SELECT Lesson_Id,Lesson_Title,Subject_Id,Lesson_Img FROM [Ali].[dbo].[tblLessons] where Subject_Id ='" + Request.QueryString["id"].ToString() + "' "; 

    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = sqlStatment; 
    cmd.Connection = cn; 

    DataTable dt = new DataTable(); 

    dt.Load(cmd.ExecuteReader()); 

    dllessons.DataSource = dt; 
    dllessons.DataBind(); 
} 

ich weiß nicht, wie man den Dateinamen (Lesson_Title) aus der Datentabelle (dt) extrahiert, um ihn zu verwenden, wenn ich eine Schaltfläche zum Herunterladen der Datei erstellen möchte?

Ich habe eine Link-Taste in der Datenliste hinzugefügt und Befehlsnamen hinzugefügt = Herunterladen

und Command = '<% # Eval ("Lesson_Title")%>'

als diesen Code eingegeben

protected void dllessons_ItemCommand(object sender, DataListCommandEventArgs e) 
    { 
     if (e.CommandName == "Download") 
     { 
      Response.Clear(); 
      Response.ContentType = "application/octect-stream"; 
      Response.AppendHeader("content-disposistion", "filename=" + e.CommandArgument); 
      Response.TransmitFile (Server.MapPath("~/My_Lessons/") + e.CommandArgument); 
      Response.End(); 
     } 
    } 

aber es funktioniert immer noch nicht ??

dank

+1

Sie sollten von Tables eine Suche Zeilen und Spalten auf das Lesen. Dadurch erhalten Sie eine Zeichenfolge mit den richtigen Dateinamen. – SpaceSteak

+0

Welchen Rahmen verwenden Sie? –

Antwort

1

ASPX;

<asp:TemplateField> 
     <ItemTemplate> 
     <asp:Button ID="downloadButton" runat="server" 
      CommandName="DownloadFile" 
    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
      Text="Download File" /> 
     </ItemTemplate> 
    </asp:TemplateField> 

Code hinter;

protected void GridView1_RowCommand(object sender, 
     GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "DownloadFile") 
     { 
     int index = Convert.ToInt32(e.CommandArgument);  
     GridViewRow row = GridView1.Rows[index]; 
     //Label or HiddenField for getting file url 
     Label lblFileUrl = (Label)row.FindControl("YourFileUrlControlId")   
     } 

    } 
+1

funktioniert nicht .. Ich möchte keine Gridview verwenden – Mark

+0

Dies ist nur ein Beispiel für Raster. Suche einfach bei Google; "So verwenden Sie Datenliste mit Befehlsschaltfläche in ASP.NET" – Mehmet

0

Dies könnte über den Rahmen dessen, was Sie suchen, aber ich tue dies normalerweise mit Skript.

ein iframe erstellen:

downloadFile: function (versionId) { 
    var id = versionId; 

    var hiddenIFrameID = 'hiddenDownloader', 
     iframe = document.getElementById(hiddenIFrameID); 
    if (iframe === null) { 
     iframe = document.createElement('iframe'); 
     iframe.id = hiddenIFrameID; 
     iframe.style.display = 'none'; 
     document.body.appendChild(iframe); 
    } 
    iframe.src = "/File/DownloadFile/?fileId=" + id; 
}, 

Code Server:

public ActionResult DownloadFile(Guid fileId) 
    { 
     var file = _FileService.GetFileData(fileId); 

     return File(file.Stream, file.ContentType, file.Name); 
    } 
Verwandte Themen