Laden...

Mit einem Event Datei downloaden & Control Property setzen?? (Verständnisfrage)

Erstellt von Taki Haki vor 13 Jahren Letzter Beitrag vor 13 Jahren 856 Views
Taki Haki Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren
Mit einem Event Datei downloaden & Control Property setzen?? (Verständnisfrage)

Hallo,

ich habe ein kleines Anfängerproblem 🙂

  1. Ich bin ASP.NET Anfänger X(

  2. Auf einer Testseite habe ich 2 Buttons und 1 Label. Mit jedem Button-Click wird der Text des Labels verändert. Beim Click auf den 2ten Button wird auch noch ein Datei-Download gestartet bzw. an den Client gesendet. Leider wird dann aber nicht mehr der Text von Label geändert. Wieso ist das so?

Meine Vermutung, durch das Anpassen des Response wird die Labeländerung nicht mehr berücksichtigt. Kann man das ihrgendwie umgehen?

Hier mein Code (Die Downloadzeile sind aus dem MSDN)


        protected void Button1_Click(object sender, EventArgs e)
        {
            TestLabel.Text = "Button1 Click";   
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            TestLabel.Text = "Button2 Click";   

            Response.ContentType = "APPLICATION/OCTET-STREAM";
            System.String disHeader = "Attachment; Filename=\"test.txt\"";
            Response.AppendHeader("Content-Disposition", disHeader);

            System.IO.FileInfo fileToDownload = new System.IO.FileInfo("E:\\test.txt");
            Response.Flush();
            Response.WriteFile(fileToDownload.FullName);
        }

Die ASP Seite enthät halt nur die 3 Controls. Das Projekt ist ein Default ASP.NET Projekt von VS2010.

Über Hilfe oder Hinweise würde ich mich freuen.

mfg Taki

K
593 Beiträge seit 2007
vor 13 Jahren

Hallo Taki Haki,

hmm hast du mal probiert ohne den Download das zu ändern? Meines wissens dürfte das auch nicht gehen genau wie bei Button1. Weil du, soweit ich das sehe, kein Ajax oder so benutzt musst du die Seite neu laden damit der Text geändert wird.

Viele Grüße,

Kaji

Taki Haki Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

Hi Kaji,

wenn ich den Download-Code auskommentiere funktioniert das ganze. Die Seite wird dann jedes mal neu geladen. Das stört mich aber nicht wirklich.

Ist die Frage ob das überhaupt geht ohne AJAX?

mfg Taki

K
593 Beiträge seit 2007
vor 13 Jahren

Hallo Taki Haki,

naja bei Ajax brauchst du keinen reload sondern dann wird quasi die Variable on the fly neu gesetzt, naja egal tut jetzt nicht soviel zum Thema. Kannst du den im Debugger schauen ob die Variable bei Button2 gesetzt wird? Wenn ja würde ich vermuten das der Seiten-Refresh nicht richtig funktioniert bei dir wenn ein Download gestartet wird.

Viele Grüße,

Kaji

Taki Haki Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

Wenn die Click2 Methode verlassen ist der Text auf den neuen Wert gesetzt. Wird halt nur nicht angezeigt 😕

K
593 Beiträge seit 2007
vor 13 Jahren

Hallo Taki Haki,

dann mach doch einfach danach mal einen Seiten Reload. Oder halt über Ajax aktualisieren je nachdem was du machst.

Viele Grüße,

Kaji

Taki Haki Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

hi,

habe mal folgende Zeile hinzugefügt

Response.AppendHeader("Refresh", "0");

dann wird die Seite auch neu geladen nachdem der DownloadDialog weg ist ABER
es werden die default Informationen der Seite geladen.

Für meine Anforderung reicht die Lösung, weil ich dem Label dann von Anfang an schon einen der zwei Texte als default mit gebe. Doch das eigendlich Problem wird ja nicht dadurch gelösst 😕

Der neue Text Wert wird nach dem Refresh nicht übernommen oder gibt es einen anderen Weg für das Reload? Bin halt nen Anfänger, kenn mich mit ASP nicht wirklich aus.

mfg Taki

K
593 Beiträge seit 2007
vor 13 Jahren

Hallo Taki Haki,

ach so 😃 Du musst natürlich die Variablen deiner Seite mitgeben. Wie das geht kannst du hier schön sehen 😃

Viele Grüße,

Kaji

Taki Haki Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

So...

habe mal die verschiedenen Varianten ausprobiet und mich für sie Sessionvariable entscheiden.

        protected void Page_Load(object sender, EventArgs e)
        {
            TestLabel.Text = (string)Session["TestLabelValue"];
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Session["TestLabelValue"] = "Button1 Click";
            //Response.Redirect(Request.RawUrl);
            Response.AppendHeader("Refresh", "0");
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Session["TestLabelValue"] = "Button2 Click";

            Response.ContentType = "APPLICATION/OCTET-STREAM";
            System.String disHeader = "Attachment; Filename=\"test.txt\"";
            Response.AppendHeader("Content-Disposition", disHeader);
            Response.AppendHeader("Refresh", "0");

            System.IO.FileInfo fileToDownload = new System.IO.FileInfo("E:\\test.txt");
            Response.Flush();
            Response.WriteFile(fileToDownload.FullName);
        }

Das ganze funktioniert wunderbar, leider ist der Mechanimus nicht wirklich schnell durch den doppelten Seitenaufbau 😦

Aber ohne AJAX geht das wohl nicht 😕

Vielen Dank für die Hilfe Kaji

mfg Taki

5.941 Beiträge seit 2005
vor 13 Jahren

Salute Taki Haki

Du solltest das mit einem HttpHandler lösen.
Schau dir das mal an:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011