Сохранение свойств элемента управления - PullRequest
0 голосов
/ 27 января 2011

ОК. Время для еще одного тупого вопроса от твоего истинного.

У меня есть элемент управления, который имеет некоторые свойства, которые необходимо сохранить в ViewState. Мне также нужно убедиться, что свойства не перезаписываются, если элемент управления появляется на странице более одного раза.

Я думал написать что-то вроде ...

ViewState[String.Format("{0}_{1}", "BaseKey", this.ClientID)] = ...

Но значение ClientID меняется в течение жизненного цикла страницы. Он начинается как что-то вроде «MyControl1», а затем становится «ctl001_MyControl1». Таким образом, все значения, примененные до его изменения, будут потеряны.

То же самое происходит, если вместо этого я использую UniqueID.

Я знаю, что упускаю что-то очевидное, и я буду винить таблетки, которые я принимаю, поэтому я не выгляжу слишком онемел.

- Стюарт

Ответы [ 3 ]

2 голосов
/ 27 января 2011

похоже, что вы делаете это внутри пользовательского элемента управления, если это так, вам не нужно создавать уникальный ключ для состояния представления, каждый экземпляр каждого элемента управления управляет своим собственным состоянием представления, поэтому все, что вам нужно, это ключ, известный для ваш контроль, что-то вроде этого:

ViewState[@"somekey"] = ...
1 голос
/ 27 января 2011

Не сохраняйте значение по имени относительно выходного имени самого элемента управления.Укажите уникальное неизменное имя, а затем убедитесь, что все ваши правила привязки соответствуют этому имени вместо имени клиента.

Редактировать: В качестве небольшого примера того, что я имею в виду:

MyControl ctrl1 = new MyControl();
ctrl1.ID = "MyControlA";
ctrl1.Text = "Some text";
ViewState[ctrl1.ID] = ctrl1.Text;

MyControl ctrl2 = new MyControl();
ctrl2.ID = "MyControlB";
ctrl2.Text = "Some other text";
ViewState[ctrl2.ID] = ctrl2.Text; 
1 голос
/ 27 января 2011

Попробуйте сделать это на Page_PreRender, а не на Page_Load?

...