2010-04-27 84 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