У меня проблема с ViewState. У меня есть страница aspx, которая имеет древовидное представление слева и панель обновления с панелью ASP.NET внутри справа. Именно в этой внутренней панели я загружаю и выгружаю динамически пользовательские элементы управления. Я использую эту панель обновлений для динамической загрузки элементов управления.
Я также создал пользовательский элемент управления для своих пользовательских элементов управления, потому что мне нужно передать некоторые значения со страницы. В этом конструкторе я использую ViewState для хранения этих значений.
При первой загрузке пользовательского элемента управления я вызываю его конструктор с параметрами. Когда я перезагружаю этот пользовательский элемент управления при каждой обратной передаче, я использую его обычный конструктор.
Моя проблема в том, что значения, которые я сохранил во ViewState, стали нулевыми при последующей обратной передаче.
Обновление:
Это часть моего пользовательского контроля:
public class MyUserControl : System.Web.UI.UserControl
{
private int PKId
{
get { return ViewState["pkId"] as int; }
set { ViewState["pkId"] = value; }
}
public MyUserControl(int pkId)
{
this.PKId = pkId;
}
...
}
Я следую этой статье, чтобы динамически загружать элементы управления: http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065.
Второе обновление:
Я также устанавливаю тот же идентификатор элемента управления, когда загружаю пользовательский элемент управления в первый раз и в каждой области.
Может быть, я могу использовать другой метод для хранения этих значений, таких как ввод скрытых полей или кэш. Я выбрал ViewState, потому что не хочу перегружать сервер значениями сеанса для каждого пользователя.
Третье обновление:
I load the controls with this code:
System.Web.UI.UserControl baseControl = LoadControl(ucUrl) as System.Web.UI.UserControl;
if (baseControl != null)
{
baseControl.ID = "DestinationUserControl";
PanelDestination.Controls.Add(baseControl);
}
И reaload с этим кодом:
DynamicControls.CreateDestination ud = this.LoadControl(TrackedUserControl) as DynamicControls.CreateDestination;
if (ud != null)
{
ud.ID = "DestinationUserControl";
PanelDestination.Controls.Add(ud);
}
Что происходит?