2010-04-27 114 views
4

我有一个CheckboxList似乎加载和做一切正确,除了当我做回发,它不会有Item.Selected属性集。我对整个页面禁用了Viewstate。CheckboxList未设置选择与Viewstate禁用

我加载它,像这样(内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> 

,然后,我用的基本上是这样的(在_Click服务器端事件按钮)

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

和MyLabel从未有任何文本添加到它。我可以使用调试器验证它是否到达_Click的foreach循环,但没有选择任何项目。这可能是什么原因?

+0

我是否正确阅读您的文章,因为您有viewstate * disabled *? – ahsteele 2010-04-27 20:24:13

+0

@ahs是,整个页面。页面上还有其他一些东西不适合视图状态,并且还有性能方面的事情要考虑 – Earlz 2010-04-27 20:31:12

+1

@ahs啊,现在我看到了我的错字:P正确。 – Earlz 2010-04-27 20:38:13

回答

3

如果您在每次Page_Load呼叫中填充它,而不是只有当Page.IsPostback = false时,您将在回发中重置客户端选择。

编辑 您应该将您的项目添加到PreInit或Init事件,然后您将能够保持正确选择的项目。

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

@Cla yea,但如果我不再添加项目(当Page.IsPostback == true),那么当它到达_Click的foreach时,它没有任何ListItems – Earlz 2010-04-27 20:30:11

+0

@Cla(您的编辑)我没有访问Page_PreInit(在UserControl中工作)。另外,这甚至没有意义,因为PreInit – Earlz 2010-04-27 21:01:58

+0

@Earlz中还没有存在控件:保持动态添加控件状态的唯一方法是在init/preInit事件中添加它们。 msdn.microsoft.com/en-us/library/...。你可以尝试使用OnInit事件吗?不知道这是一个用户控件 – 2010-04-27 21:13:13