Ich habe eine Seite (Formular), die viele UserControls darauf hat, und ich versuche, eine einzige Schaltfläche zu haben, um alles zu speichern. Die UserControls sind tatsächlich verschachtelt, also wollte ich irgendwie jedem UC signalisieren, dass es sich selbst speichern sollte, anstatt alles irgendwie in ein Ereignis zu verpacken oder ein einzelnes Ereignis eine Kaskade von Speicherereignissen auslösen zu lassen.Ereignis nicht früh genug im .NET-Seitenzyklus
Mein Plan war, eine statische Klasse (Requisiten this answer für den Code) zu verwenden:
public static class RequestScopedFormData
{
private const string save_key = "request_form_is_saving";
public static bool FormIsSaving
{
get
{
object o = HttpContext.Current.Items[save_key];
return Convert.ToBoolean(o);
}
set
{
HttpContext.Current.Items[save_key] = value;
}
}
}
Idealfall eine Taste auf meinem Master würde gesetzt RequestScopedFormData.FormIsSaving = true, und als .NET baut die Seite und seine Benutzersteuerelemente würden sie selbst speichern können.
Das Problem, das ich habe, ist, dass ich ein Ereignis nicht früh genug in den Seitenlebenszyklus auslösen kann, um die Benutzersteuerelemente zu speichern. Selbst wenn ich den Sicherungscode in das PreRender-Ereignis verschiebe und den ImageButton in die Seite selbst verschiebe (anstelle der MasterPage), kann ich die FormIsSaving-Einstellung vor der UC-Sicherungsprüfung nicht auf "True" setzen.
Es passiert etwas wie folgt aus:
- Seite Page_Load
- Master Page_Load
- UC Page_Loads und PreRenders (sie gemischt werden, es prerenders einige vor es andere lädt)
- Master SaveButton_Click Ereignis (das ist, wo ich meine Klasse Variable einstellen)
- Master PreRender
- Seite PreRender
So leider die SaveButton_Click Methode geschieht, nachdem der UCs geladen werden, so dass sie sparen nie.
Dies ist definitiv, was ich gesucht habe ... außer dass mein __EVENTTARGET scheint leer zu sein. Wenn ich cks Trace = true-Vorschlag verwende, sehe ich die UniqueID nirgends in der Anfrage. –
Offenbar Schaltflächen legen das __EVENTTARGET nicht fest. http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx für eine Problemumgehung. –