У меня есть страница (форма), на которой есть много пользовательских элементов управления, и я пытаюсь использовать одну кнопку, чтобы сохранить все. UserControls на самом деле являются вложенными, поэтому я хотел как-то сигнализировать каждому 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 создает страницу и ее пользовательские элементы управления, они будут знать, как сохранить данные сами.
Проблема, с которой я столкнулся, заключается в том, что я не могу запустить событие достаточно рано в жизненном цикле страницы, чтобы сохранить пользовательские элементы управления. Даже если я переместил код сохранения в событие PreRender и переместил сохранение ImageButton на саму страницу (вместо MasterPage), мне не удастся установить для FormIsSaving значение true до проверки сохранения UC.
Это происходит примерно так:
- Страница Page_Load
- MasterPage Page_Load
- UC Page_Loads и PreRenders (они
смешиваются, это предваряет некоторые раньше
загружает других)
- Событие MasterPage SaveButton_Click
(это где я установил свой класс
переменный) * * тысяча двадцать-один
- MasterPage PreRender
- Страница PreRender
Так что, к сожалению, метод SaveButton_Click происходит после загрузки UC, поэтому они никогда не сохраняются.