Hallo,
ich habe ein kleines Anfängerproblem 🙂
Ich bin ASP.NET Anfänger X(
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
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
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
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
Wenn die Click2 Methode verlassen ist der Text auf den neuen Wert gesetzt. Wird halt nur nicht angezeigt 😕
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
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
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
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