Динамически загружаемые элементы управления и постоянство в ASP.NET
Я загружаю серию элементов управления в событии Page_Load. Однако я должен воссоздавать эти элементы управления при каждой загрузке страницы, что означает хранение их данных в другом месте. Это громоздко
protected void Page_Load(object sender, EventArgs e)
{
MyControl control = (MyControl)LoadControl(...);
control.Initialize(GlobalClass.controlData);
//^gives the control the data it had previously.
//Or use ViewState["controlData"] if serializable.
Controls.Add(control);
}
Я чувствую, что должен использовать if (!IsPostBack) {}
, но я не знаю как или почему.
Напротив, если я помещаю элементы управления в разметку, то элементы управления, кажется, остаются постоянными. Например, кнопка в разметке запоминает любые изменения в свойстве Text (я думаю?).
<asp:Button ID="buttonText" runat="server"
Text="Text Segment" onclick="buttonText_Click" />
Как мне поддерживать некое постоянство с помощью динамически добавленных элементов управления, например, элементов управления, добавляемых с помощью разметки? Это спасло бы меня от работы и разочарования.
Благодарю.
(Я кодировал целую вечность, но чем больше я делаю ASP.NET, тем больше я запутываюсь. Что совершенно противоположно тому, как я понял, научившись работать:-P.)
2 ответа
Для динамически загружаемых элементов управления, если вы загрузите их во время события Page_Init, вы можете добавить их в ViewState, и они смогут сохранять состояние из PostBack в PostBack.
Я понимаю вашу точку зрения. Да, это громоздко, но так работает технология без сохранения состояния.
Нет способа достичь того же поведения статических элементов управления (тех, которые вы добавили в разметку HTML).
Следуйте советам, которые я дал в этом ответе: