多くのUserControlが含まれているページ(フォーム)があり、すべてを保存するための1つのボタンを使用しようとしています。UserControlsは実際にはネストされているため、すべてを1つのイベントにラップしたり、単一のイベントで保存イベントのカスケードをトリガーしたりするのではなく、各UCにそれ自体を保存する必要があることを通知したいと思いました。
私の計画は静的クラスを使用することでした(コードのこの回答の小道具):
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;
}
}
}
理想的には、MasterPageのボタンでRequestScopedFormData.FormIsSaving = trueに設定し、.NETがページとそのUserControlsを構築するときに、自分で保存を実行することを認識します。
私が抱えている問題は、ページのライフサイクルの早い段階でUserControlsを保存するためのイベントを発生させることができないことです。保存コードをPreRenderイベントに移動し、保存ImageButtonを(MasterPageではなく)ページ自体に移動しても、UC保存チェックの前にFormIsSavingをtrueに設定できません。
これは次のように発生します。
- ページPage_Load
- MasterPage Page_Load
- UC Page_LoadsとPreRenders(これらは混合されており、他をロードする前に一部をプリレンダリングします)
- MasterPage SaveButton_Clickイベント(これはクラス変数を設定する場所です)
- MasterPage PreRender
- ページPreRender
そのため、残念ながら、SaveButton_ClickメソッドはUCがロードされた後に発生するため、UCが保存されることはありません。