У меня проблема с ViewState. У меня есть страница aspx с деревом слева и UpdatePanel с панелью ASP.NET внутри справа. Именно в этой внутренней панели я загружаю и выгружаю динамически пользовательские элементы управления. Я использую эту панель обновления для загрузки динамических элементов управления.переменная Viewstate, потерянная при пользовательском управлении, динамически загружается
Я также создал пользовательский элемент управления для своих пользовательских элементов управления, потому что мне нужно передать некоторые значения со страницы. В этом конструкторе я использую ViewState для хранения этих значений.
При первом загрузке пользовательского элемента управления я вызываю его конструктор с параметрами. Когда я перезагружаю этот пользовательский элемент управления при каждой обратной передаче, я использую его обычный конструктор.
Моя проблема в том, что значения, которые я сохранил на ViewState, стали нулевыми при последующей обратной передаче.
Update:
Это часть моего пользовательского элемента управления:
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.
Второе обновление:
Я также установить один и тот же идентификатор элемента управления, когда я загрузить пользовательский элемент управления в первый раз, и на каждом reaload.
Возможно, я могу использовать другой метод для хранения этих значений, таких как ввод скрытых полей или кеша. Я выбрал ViewState, потому что я не хочу перегружать сервер с помощью значений Session для каждого пользователя.
Третье обновление:
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);
}
Что происходит?
Пожалуйста, предоставьте часть кода, который делает это, чтобы мы могли лучше понять, что происходит. –
Я обновил вопрос. – VansFannel
Почему вы вводите его как UserControl в начальной загрузке и как CreateDestination при повторной загрузке? –