Я работаю над проектом ASP.NET, в котором подавляющее большинство форм генерируется динамически во время выполнения (определения форм хранятся в БД для возможности настройки). Поэтому я должен динамически создавать и добавлять свои элементы управления на страницу каждый раз, когда запускается OnLoad, независимо от IsPostBack. Это работает нормально, и .NET заботится об управлении ViewState для этих элементов управления.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
RenderDynamicControls()
}
private void RenderDynamicControls()
{
//1. call service layer to retrieve form definition
//2. create and add controls to page container
}
У меня есть новое требование, согласно которому, если пользователь нажимает на данную кнопку (эта кнопка создается во время разработки), страница должна быть перерисована немного другим способом. Таким образом, в дополнение к коду, выполняемому в OnLoad (т.е. RenderDynamicControls ()), у меня есть этот код:
protected void MyButton_Click(object sender, EventArgs e)
{
RenderDynamicControlsALittleDifferently()
}
private void RenderDynamicControlsALittleDifferently()
{
//1. clear all controls from the page container added in RenderDynamicControls()
//2. call service layer to retrieve form definition
//3. create and add controls to page container
}
У меня вопрос: действительно ли это единственный способ добиться того, чего я добиваюсь? Кажется нехорошо эффективно дважды визуализировать форму, просто реагируя на нажатие кнопки. Из моего исследования я понял, что именно так работает жизненный цикл страницы в ASP.NET: именно, OnLoad должен запускаться при каждой обратной передаче перед вызовом дочерних событий. Тем не менее, стоит проконсультироваться с SO-сообществом, прежде чем пить kool-aid.
В связанной заметке, как только я завершу эту функцию, я планирую добавить UpdatePanel на страницу, чтобы выполнять обновления страницы через Ajax. Любой код / совет, который облегчит этот переход, будет очень признателен.