ViewState и клиентские изменения - PullRequest
1 голос
/ 29 июня 2010

Я заметил, что некоторые элементы управления (например, TextBox) сохраняют свои изменения между постбэками, даже если изменение выполняется клиентским скриптом, в то время как некоторые другие этого не делают (например, ListBox).Может кто-нибудь объяснить мне, почему?Есть ли способ распространить первое поведение на другие элементы управления?Спасибо!

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Это зависит от того, когда ListBox привязывается к данным или заполнен ListItem.

Как правило, такой случай может возникнуть, когда ListBox создается внутри другого родительского элемента управления, такого как Repeater, а Repeaterпривязка данных к событию Page_Load.Это означает, что ListBox фактически не существует, пока не закончится событие Page_Load.

ViewState восстанавливается в ListBox где-то между событиями Page_Init и Page_Load элемента управления Page.Если содержимое ListBox создается во время события Load, это означает, что ViewState ListBox не может восстановить содержимое после PostBack и не может отслеживать и автоматически выбирать новое SelectedValue из PostBack.

ЕслиПовторитель в этом случае привязан к данным в событии Page_Init, содержимое ListBox будет готово после события Page_Init, и ViewState сможет правильно восстановить и автоматически выбрать SelectedValue.

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

Подробнее о жизненном цикле страницы веб-формы ASP.NET см.

http://msdn.microsoft.com/en-us/library/ms178472.aspx

0 голосов
/ 29 июня 2010

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

Возможно, ваш ListBox теряет изменения, потому что вы заполняете его в каждом PostBack.

Попробуйте сделать

if(!IsPostBack)
{
 PopulateMyListBox()
}
...