问题
I have a CheckboxList that seems to load and do everything right, except for when I do a postback, it will not have the Item.Selected
property set. I have viewstate disabled for the entire page.
I load it like so(inside Page_Load
on every load):
foreach (DataRow service in d.Tables[0].Rows)
{
cblServices.Items.Add(new ListItem((string)service["description"], service["id"].ToString()));
}
My markup is simple:
<asp:CheckBoxList runat="server" ID="cblServices" Width="300px"></asp:CheckBoxList>
and then, I use basically something like this(in a _Click serverside event for a button)
foreach(ListItem item in cblServices.Items){
if(item.Selected){
MyLabel.Text+="selected: "+item.Value+item.Text;
}
}
and MyLabel never has any text added to it. I can verify with the debugger that it does reach the _Click's foreach loop, but no item is ever selected. What could be the cause of this?
回答1:
If you're filling it on every Page_Load call, not only when Page.IsPostback = false
then you're reseting the client selection on postback.
EDIT You should add your items on the PreInit or Init event, then you'll be able to keep the selected items correctly.
protected void Page_Init(object sender, EventArgs e)
{
foreach (DataRow service in d.Tables[0].Rows)
...
}
来源:https://stackoverflow.com/questions/2724771/checkboxlist-not-setting-selected-with-viewstate-disabled