Asp.Net Global.asax Zugriff auf die aktuellen angeforderte Seite Objekt
Gibt es eine Möglichkeit, ich kann auf die Seite zugreifen Objekt, von innerhalb der global.asax Application_EndRequest Funktion ?
Ich versuche den text von einem label am Ende der Anfrage aber der Zugriff auf die Seite erweist sich als schwieriger als ich dachte.
hier ist, was ich habe, die derzeit NICHT arbeiten:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
Context.Items.Add("Request_Start_Time", DateTime.Now);
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]);
System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page;
if (page != null)
{
Label label = page.FindControl("lblProcessingTime") as Label;
if (label != null)
{
label.Text = String.Format("Request Processing Time: {0}", tsDuration.ToString());
}
}
}
Seite ist immer null hier.
Vielen Dank im Voraus.
InformationsquelleAutor John Boker | 2009-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es wahrscheinlich am besten, nur um eine BasePage-Klasse, von dem alle Seiten Erben sollte. Dann können Sie den code in das Unload-Ereignis der Seite und es gibt kein Problem.
Danke. Ich dachte nur, es würde hilfreich sein, um darauf hin ein weiterer Ansatz, der möglicherweise nicht bemerkt worden.
Gute call Nolodorin. Ich würde denken, das wäre die beste Idee. Noch besser wäre es, eine master-Seite verwenden, um sicherzustellen, das label würde immer da sein, wie es klingt, wie jede Seite die gleiche Beschriftung.
Ich werde überprüfen diese Methode, die Beschriftung ist auf einer masterpage und ich haben eine basepage bereits definiert. das problem ist nur, es ist mehr als eine basepage definiert, so werde ich haben, es zu tun für jeden.
Das ist in Ordnung, setzen Sie einfach die event-handler-setup im Konstruktor der MasterPage. d.h. dies.Seite.Entladen += ...
InformationsquelleAutor Noldorin
In dieser Phase von der Anfrage über den Lebenszyklus der Seite ist bereits gerendert und das page-Objekt ist nicht mehr verfügbar. Sie würde auf einer früheren Veranstaltung.
Sagte, ich würde nicht empfehlen, diesen Ansatz, da gibt es eine Reihe von Fragen:
Sind Sie mit FindControl. Dieser code wird brechen, wenn Sie den Namen des Steuerelements ändert.
Dieser code wird erhalten, führen Sie für jede Anfrage, nicht nur auf Seiten und nicht nur die bestimmten Seiten, die Sie benötigen diese, um auszuführen.
Dieser code sollte in eine master-Seite oder eine Seite, die base-Klasse, dort können Sie die Bezeichnung in einer Art sicheren Art und Weise.
Ja, das label null sein wird, die Funktionalität zu brechen. Ich verabscheue die Verwendung von FindControl. In 99% der Fällen ist es verwendet wird, ist es aufgrund der schlechten design. Es gibt fast immer einen Weg zu erklären, eine stark typisierte Instanz der Kontrolle, die Sie versuchen, zu finden.
InformationsquelleAutor Jim Petkus
Können Sie nicht in der Application_Start-und Application_End.
Aus der MSDN:
Application_Start und Application_End Methoden sind spezielle Methoden, die nicht vertreten HttpApplication-Veranstaltungen. ASP.NET ruft Sie sobald für die Lebensdauer der Anwendungsdomäne, nicht für jeden HttpApplication-Instanz.
http://msdn.microsoft.com/en-us/library/ms178473.aspx
InformationsquelleAutor Steven Behnke