.
Anmeldung | Registrieren | Hilfe
in Suchen

Download im UpdatePanel starten

Letzter Beitrag 27. Jan 2010 23:00 von Nek. 12 Antworten.
Seite 1 von 1 (13 Treffer)
Beiträge sortieren: Zurück Weiter
  • 26. Mrz 2008 15:48

    • Jan Welker
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 13. Jan 2008
    • 90491
    • Beiträge 1.464
    • Punkte 20.265
    • Moderator

    Download im UpdatePanel starten

    Hallo,

    ich habe ASP.Net Ajax Webseite die ich erweitern möchte. Auf der Webseite befindet sich ein UpdatePanel. In dieses UpdatePanel möchte ich einen Button einbauen.
    Wenn auf den Button geklickt wird, soll eine Datei heruntergeladen werden.

    Den Download wollte ich in etwa so realisieren:

    /// <summary>
    /// Starts the download.
    /// </summary>
    /// <param name="path">The path.</param>
    private static void StartDownload(string path)
    {
        FileInfo downloadFile = new FileInfo(path);
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", downloadFile.Name));
        HttpContext.Current.Response.AddHeader("Content-Length", downloadFile.Length.ToString());
        HttpContext.Current.Response.ContentType = "application/octet-stream";
        HttpContext.Current.Response.WriteFile(downloadFile.FullName);
        HttpContext.Current.Response.End();
    }


    Nun passiert folgendes, der Inhalt der Datei wird in das XML geschrieben das zum Client geschickt wird. Das JavaScript auf der Clientseite kann damit nichts anfangen und wirft eine Exception.

    Wie kann man den Download anders realisieren, so dass auf dem Client ein Download-Dialog angezeigt wird?
    Vielleicht mit einem Generischen Handler?

    Danke!
    Abgelegt unter: , ,
    • IP-Adresse ist Registriert
  • 26. Mrz 2008 23:00 Antwort zu

    Download im UpdatePanel starten

    Ich vermute, daß XmlHttpRequest nichts damit anfangen kann, sondern der Browser selber muß diese Response verarbeiten. Vielleicht kannst Du es so umbauen, daß Dein JavaScript ein Redirect zu Deinem Download-Handler macht.
    Gruß,
    Thomas


    Thomas Freudenberg
    • IP-Adresse ist Registriert
  • 27. Mrz 2008 1:03 Antwort zu

    • Jan Welker
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 13. Jan 2008
    • 90491
    • Beiträge 1.464
    • Punkte 20.265
    • Moderator

    Download im UpdatePanel starten

    Hallo,

    am Javascript kann ich in dem Fall nichts machen, ich nutze ASP.NET Ajax. Dort wird das passende JS automatisch generiert. Huh?

    Ich bräuchte schon eine Server-seitige Lösung.

    Jan

    • IP-Adresse ist Registriert
  • 27. Mrz 2008 8:28 Antwort zu

    Download im UpdatePanel starten

    Es gibt keine server-seitige Lösng, weil der Browser die Response empfangen muß und nicht das XmlHttpRequest Objekt.

    Gruß,
    Thomas


    Thomas Freudenberg
    • IP-Adresse ist Registriert
  • 27. Mrz 2008 10:23 Antwort zu

    Download im UpdatePanel starten

    Hallo Jan,

    du kannst den Download nicht innerhalb der Page serverseitig starten, wie du es mit der methode StartDownload machst, damit bringst du unter anderem den Page Lifecycle durcheinander ;-)

    Die übliche Vorgehensweise ist das Du einen ASPX Seite, oder besser einen Generic Handler (ASHX) baust, der nichts anderes macht, als die entsprechende Datei an den Client zu senden (enhält also nur den Code aus deiner StartDownload Methode). Auf deiner Seite musst du jetzt nur noch diese Download Page, oder diesen Download Handler aufrufen und fertig. Den Dateinamen übergibst du dabei als URL Parameter.

    • IP-Adresse ist Registriert
  • 27. Mrz 2008 10:35 Antwort zu

    • Peter Bucher
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 29. Jan 2008
    • Schweiz, Luzern
    • Beiträge 38
    • Punkte 560

    Download im UpdatePanel starten

    • IP-Adresse ist Registriert
  • 27. Mrz 2008 20:05 Antwort zu

    • Jan Welker
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 13. Jan 2008
    • 90491
    • Beiträge 1.464
    • Punkte 20.265
    • Moderator

    Download im UpdatePanel starten

    Hallo Peter, hallo Jürgen,

    mit dem generischen Handler funktioniert es perfekt!
    Vielen Dank für eure Hilfe.

    Das Ergebnis könnt ihr euch hier ansehen, die Seite hatte ich vor kurzem auf Ajax umgestellt: email2image.com , mir fehlte nur noch der Download Button.

    Jan

    • IP-Adresse ist Registriert
  • 28. Mrz 2008 8:31 Antwort zu

    Download im UpdatePanel starten

    Hallo Jan,

    Jan Welker:
    Das Ergebnis könnt ihr euch hier ansehen, die Seite hatte ich vor kurzem auf Ajax umgestellt: email2image.com , mir fehlte nur noch der Download Button.
    soso... du hast die Site also verbrochen ;-)

    Gute Arbeit, gefällt mir :-) Wird's noch mehr Funktionen geben?

    • IP-Adresse ist Registriert
  • 28. Mrz 2008 8:35 Antwort zu

    • Jan Welker
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 13. Jan 2008
    • 90491
    • Beiträge 1.464
    • Punkte 20.265
    • Moderator

    Download im UpdatePanel starten

    Jürgen Gutsch:
    Wird's noch mehr Funktionen geben?

    Welche könnte es denn geben ? Hast du Vorschläge?

    Jan

    • IP-Adresse ist Registriert
  • 28. Mrz 2008 8:39 Antwort zu

    Download im UpdatePanel starten

    Jan Welker:

    Jürgen Gutsch:
    Wird's noch mehr Funktionen geben?

    Welche könnte es denn geben ? Hast du Vorschläge?

    hmm.. zum Bleistift: Email to HTML encodet string, oder so ähnlich: &#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#117;&#101;&#114;&#103;&#101;&#110;&#64;&#103;&#117;&#116;&#115;&#99;&#104;&#45;&#111;&#110;&#108;&#105;&#110;&#101;&#46;&#100;&#101;
    (juergen [at] gutsch-online [dot] de)
    • IP-Adresse ist Registriert
  • 28. Mrz 2008 18:21 Antwort zu

    • Jan Welker
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 13. Jan 2008
    • 90491
    • Beiträge 1.464
    • Punkte 20.265
    • Moderator

    Download im UpdatePanel starten

    Hallo,

    Die Funktion "Email to HTML encoded String" werde ich der Vollständigkeit mit aufnehmen.

    Ich habe schon an mehreren Stellen gelesen, das einige Harvester mitlerweile textbasierte Browser nutzen. Somit sind die JavaScript und HTML Varianten nicht mehr sicher.

    Das Bilder "gelesen" werden kann ich mir schwer vorstellen, aber nichts ist unmöglich.

    Jan

    • IP-Adresse ist Registriert
  • 03. Apr 2008 19:21 Antwort zu

    • Peter Bucher
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 29. Jan 2008
    • Schweiz, Luzern
    • Beiträge 38
    • Punkte 560

    Download im UpdatePanel starten

    Hallo Jan

    Klar geht das.
    Es sind schon viele Captchas geknackt worden.

    OCR Texterkennung auf einem höheren Niveau :-)

    • IP-Adresse ist Registriert
  • 27. Jan 2010 23:00 Antwort zu

    • Nek
    • Nicht gereiht
    • Registriert am 27. Jan 2010
    • Beiträge 1
    • Punkte 5

    Download im UpdatePanel starten

    Hallo zusammen,

    ich würde das Thema gerne nochmal aufgreifen, allerdings mit kleinen Abwandlungen.

    Folgende Situation:

    Ich möchte dem Benutzer ermöglichen den Inhalt einer SQL-Tabelle nach MS-Access zu exportieren.
    Und diese Access-Datei als Download an den Client zurück zuschicken.

    Das ganze soll auch in einem Updatepanel ablaufen.
    Der Nutzer wählt über eine DDL die SQL-Tabelle aus, welche er exportiert haben möchte und klickt anschließend einen Button.

    Passieren soll nun folgendes:
    Die Erzeugung der Access-Datei am Server nimmt ja einige Sekunden Zeit in Anspruche.
    Wärend des Erzeugens der Access-Datei, soll nun mittels asp:UpdateProgress ein Feedback an den Benutzer gegeben werden. ("Bitte warten")

    Soweit funktioniert alles, allerdings bleibt der Inhalt des UpdateProgress weiterhin sichtbar, nach dem die
    *.ashx-Datei aufgerufen wurde und der Download-Dialog erfolgt ist.

    Gibt es eine Möglichkeit das UpdatePanel auf seinen Ausgangszustand zurückzusetzen, wenn der Client den Download-Dialog seines Browsers erhält?

    Sporadische Codebeispiel:

    *.aspx
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
                                    <ContentTemplate>                                    
                                        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />                                    
                                    </ContentTemplate>
                                    <Triggers>
                                        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
                                    </Triggers>
                                </asp:UpdatePanel>
                                <asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" runat="server">
                                    <ProgressTemplate>
                                        Bitte warten...
                                    </ProgressTemplate>
                                </asp:UpdateProgress>

    *.aspx.cs
    protected void Button1_Click(object sender, EventArgs e)
            {            
                System.Threading.Thread.Sleep(10000);
                Response.Redirect("download.ashx");           
            }


    download.ashx
    [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class Download : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                
                FileInfo fi = new FileInfo("c:\\test.txt");
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fi.Name));
                HttpContext.Current.Response.AddHeader("Content-Length", fi.Length.ToString());
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                HttpContext.Current.Response.WriteFile(fi.FullName);
                HttpContext.Current.Response.End();  
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }




    • IP-Adresse ist Registriert
Seite 1 von 1 (13 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum