2010-04-27 10 views
4

У меня есть CheckboxList, который, кажется, загружает и делает все правильно, за исключением случаев, когда я делаю обратную передачу, у него не будет установлен набор свойств Item.Selected. У меня отключено viewstate для всей страницы.CheckboxList not setting Selected with Viewstate disabled

я загрузить его, как так (внутри Page_Load при каждой загрузке):

foreach (DataRow service in d.Tables[0].Rows) 
{ 
    cblServices.Items.Add(new ListItem((string)service["description"], service["id"].ToString())); 
} 

Моя разметка проста:

<asp:CheckBoxList runat="server" ID="cblServices" Width="300px"></asp:CheckBoxList> 

, а затем, я использую в основном что-то вроде этого (в ServerSide _Click событие для кнопки)

foreach(ListItem item in cblServices.Items){ 
    if(item.Selected){ 
    MyLabel.Text+="selected: "+item.Value+item.Text; 
    } 
} 

и у MyLabel никогда не было добавлено ни одного текста. Я могу проверить с помощью отладчика, что он достигает цикла foreach _Click, но ни один элемент не выбран. Что может быть причиной этого?

+0

Правильно ли я прочитал ваше сообщение, поскольку у вас есть viewstate * disabled *? – ahsteele

+0

@ahs да, для всей страницы. На странице есть другие вещи, которые не играют хорошенько с viewstate, и, кроме того, есть соображения производительности, которые следует учитывать – Earlz

+1

@ahs ahh, теперь я вижу свою опечатку: P исправлено. – Earlz

ответ

3

Если вы заполняете его при каждом вызове Page_Load, а не только тогда, когда Page.IsPostback = false, то вы отправляете запрос на выбор клиента после обратной передачи.

EDIT Вы должны добавить свои пункты на событие PreInit или Init, то вы будете в состоянии правильно держать выбранные элементы.

protected void Page_Init(object sender, EventArgs e) 
{ 
    foreach (DataRow service in d.Tables[0].Rows) 
    ... 
} 
+0

@Cla yea, но если я не добавлю лишние элементы (когда page.IsPostback == true), тогда, когда он попадает в foreach _Click, у него нет ListItems – Earlz

+0

@Cla (ваше редактирование) У меня нет доступ к странице_PreInit (работает в UserControl). Кроме того, это даже не имеет смысла, поскольку элементы управления еще не существуют в PreInit – Earlz

+0

@Earlz: единственный способ сохранить состояние динамически добавленных элементов управления - это добавить их в событие init/preInit. msdn.microsoft.com/en-us/library/.... Не могли бы вы попробовать с событием OnInit. Не знал, что это User Control –