2009-02-22 2 views
4

У меня есть usercontrol, который предоставляет кнопки голосования (для модели голосования типа SO) - он содержит частный член int, который сохраняет идентификатор записи. Вне ретранслятора он функционирует нормально - работает с обратной почтой, а правильный идентификатор сохраняется в пользовательском элементе управления.Элементы управления пользователя в репитере

Внутри ретранслятора обработчик события itemdatabound связывает правильный идентификатор с usercontrol, и он работает правильно - отображает правильный подсчет голосов из базы данных. Однако, когда нажата одна из кнопок голосования, она запускает обратную передачу в usercontrol, и элемент управления потерял содержимое своего частного члена, так что он больше не функционирует.

Я попытался как повторно привязать usercontrol к обратной передаче, так и привязать его только к начальной загрузке - проблема одинакова в обоих направлениях.

Как заставить usercontrol сохранить значение этого int через обратную передачу?

ответ

5

Вы пробовали поместить значение в viewstate?

public string Id{ 
    get 
    { 
     return this.ViewState["Value"] == null ? 
      0 : 
      (int)this.ViewState["Value"]; 
    } 
    set { this.ViewState["Value"] = value; } 
} 
+0

Да, я думаю, вы правильно определили причину и решение. – Cerebrus

+0

Спасибо! Это сделал трюк. Любое понимание того, почему мне нужно сделать это для контроля в ретрансляторе, но тот же самый контроль работает правильно за его пределами? – azollman

+0

Отдельные переменные-члены в элементах управления не сериализуются как часть состояния представления и, таким образом, не восстанавливаются после обратной передачи. Вышеприведенное решение является правильным, если вы хотите сохранить приватный var в представлении. Другой вариант - использовать скрытое текстовое поле, после чего оно будет автоматически восстановлено. – DancesWithBamboo

Смежные вопросы