2009-03-22 12 views
2
protected void Page_Load(object sender, EventArgs e) 
{Label1.Text = DateTime.Now.ToString();} 

verhalten Wenn nachdem ich diese neu erstellte Anwendung kompiliert, Browser-B1 ist erste Cache.aspx zu verlangen, dann ist die Zeit auf empfangene Seite angezeigt beträgt 10,16: 20. Wenn ich nach etwa 10 Sekunden B1's Cache.aspx aktualisiere (indem ich auf eine Schaltfläche klicke, um ein Postback zu verursachen), dann wird die Zeit 10.16.30 angezeigt, und unter werden alle nachfolgenden Postbacks 10.16.30 immer angezeigt (bis 1 Stunde vergeht). Wenige Minuten nachdem B1 zuerst Cache.aspx angefordert hat, fordert der Browser B2 auch die gleiche Seite an, dann beim Empfang der Seite für die erste Zeit, zeigt B2's Cache.aspx Zeit 10.16.20 und auf allen nachfolgenden B2 Postbacks Zeit 10.16: 30 wird stattdessen angezeigt.Output seltsam

A) So scheint es, dass Asp.net zwei Cache gespeicherte Versionen von Cache.aspx erzeugt (so wird der Code ausgeführt zweimal), wird eine Cache-Seite Browser gegeben, die Cache.aspx zum ersten Mal anfordern, und die zweiten Cache-Seite wird an Browser übergeben, die nur ihren Cache.aspx aktualisieren?

B) Da mein Buch nie ein solches Verhalten erwähnt, frage ich mich, ob Sie das gleiche Verhalten erhalten oder ist meine Net-Umgebung wieder "einmalig"?

C) Erstellen von zwei Kopien derselben Seite (also den Code zweimal ausführen) scheint wie eine Verschwendung von Zeit, also warum nicht Asp.Net arbeitet so - muss es einige Überlegungen/Nutzen dahinter stecken?

danke

+0

Sind Sie sicher, dass alle beteiligten URLs identisch sind, sogar bis zur Zeichenumrahmung? – AnthonyWJones

+0

ASP.NET generiert tatsächlich unterschiedliche Markups für verschiedene Browser. Ich bin mir nicht sicher, ob es sich auf den <% @ OutputCache VaryByParam = "none"%> auswirkt oder nicht. –

+0

> Sind Sie sicher, dass alle beteiligten URLs identisch sind, sogar bis zur Zeichenumrahmung? Ja, da ich URL von einem Browser zu einem anderen > ASP.NET ist in der Tat erzeugen unterschiedliche Aufschläge für verschiedene Browser ... Nicht sicher kopiert verstehe ich, was Sie sagen, aber ich habe firefox in allen meinen testings – SourceC

Antwort

2

Eine vollständige Vermutung, aber vermutlich der Cache wird durch die allgemeine Anfrage (Query-String args, usw.) isoliert ... obwohl die „keine“ off dreht den Schlüssel/Wert-Paare, vermutlich ein "GET" wird einfach noch als anders als ein "POST" gezählt?

Versuchen Sie, einfache Links (<a href...> usw.) anstelle von ASP.NET-Schaltflächen zu verwenden.

1

Ich habe es nur ein wenig probiert und gespielt und es scheint, Marc's Vorstoß ist richtig, der Cache ist abhängig von der Methode (GET/POST).

Aber ich erinnere mich dabei wenig Demos wie diese (mit ASP.NET 2) und ich bin mir ziemlich sicher, dass dies nicht, wie es früher war ...
So könnte es etwas sein, das in ASP.NET geändert 3.5 und/oder SP1, aber ich konnte keine Erwähnung finden.

Wie schlimm das ist, bin ich mir nicht ganz sicher, kann ich sowohl Pro und Contra denken.

+0

Ich bin froh, dass es nicht auf meinem Asp.Net einzigartig ist – SourceC

0

wenn ich versuchen if (IsPostBack) response.cache.setcachebility beginnen (nocache) Ende

dann auf die Schaltfläche klicken aktualisiert das Etikett jedes Mal.