2012-03-06 86 views
0

我正在使用ASP.NET(Visual C#)在SharePoint可視Web部件中創建自定義視圖,並具有CheckBoxList和一個按鈕。CheckBoxList被清除按鈕單擊

標記的列表&按鈕:

<td> 
    <asp:checkboxlist ID="cblYearLst" runat="server" EnableViewState="true" /> 
</td> 
<td> 
    <asp:Button ID="btnRefineSearch" Text="Refine Search" runat="server" /> 
</td> 

我將項目添加到CheckBoxList的上預渲染:

if (!IsPostBack) 
{ 
    if (LstYears != null) 
    { 
     for (int i = 0; i < LstYears.Count(); i++) 
     { 
      cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i])); 
     } 
    } 
} 

我呼籲按鈕的事件處理程序上的Page_Load:

btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click); 

按鈕之後,所有CheckBox列表項都不會保持選中狀態點擊。我可以檢索選定的值,但不會顯示爲選定的值。當我在預渲染事件中爲按鈕添加Click事件處理程序時,數據會正確顯示,但是我的Click事件不能再檢索選定的值。

關於什麼可能會導致此行爲的任何想法?

+1

我認爲你在週期中太晚加入物品。將它們添加到Init上的PreInit上:http://stackoverflow.com/questions/2724771/checkboxlist-not-setting-selected-with-viewstate-disabled – jmaglio 2012-03-06 14:30:33

+0

@jfmags我已經嘗試了您提供的建議,但列表不再顯示。 – anpatel 2012-03-06 14:34:08

+0

你在哪裏設置LstYears? – jmaglio 2012-03-06 14:42:44

回答

0

我想通了這個問題,因爲我有AutoEventWireUp設置爲true基南曾建議它應該,如果我這樣做在Page_Load的所有工作。

問題是Page_Load被調用了兩次,我發現這是因爲我用QueryString參數將用戶重定向到了相同的URL。在我做了必要的更改之後,我的代碼運行得非常好。

+1Keenan爲您的幫助和謝謝(@jfmags)通過告訴我你告訴我你認爲它是別的東西。

:D

1

您是否嘗試將checkboxlist的綁定移動到page_load而不是pre_render?只是一個想法,因爲它似乎是頁面在回發中丟失選擇,並且您每次都重新生成選項。

更新:我創建了一個快速頁面,這個工作正常。你的viewstate是否關閉了頁面指令中的整個頁面,或者可能在web.config中?我看到你在checkboxlist上啓用了它,但也許有一個全局設置將你拋棄。

 
protected void Page_Load(object sender, EventArgs e) 
    { 
     btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click);

List<string> LstYears = new List<string>(); LstYears.Add("one"); LstYears.Add("two"); LstYears.Add("three"); LstYears.Add("four"); if (!IsPostBack) { if (LstYears != null) { for (int i = 0; i < LstYears.Count; i++) { cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i])); } } } } private void btnRefineSearch_Click(object sender, EventArgs args) { Response.Write(cblYearLst.SelectedValue); }
+0

是的,這就是我所做的最初,但CheckBoxList的得到了清理和一個老鄉程序員建議增加CheckBoxList的項目上的PreRender – anpatel 2012-03-06 14:35:25

+0

的Pre_Render爲時已晚在生命週期中添加的選項。簽出[鏈接](http://msdn.microsoft.com/en-us/library/ms178472.aspx)查看會發生什麼以及何時發生。 – Keenan 2012-03-06 14:49:37

+0

我把它設置爲true在.aspx文件頁面指令太多,但病檢查web.config中 – anpatel 2012-03-06 15:09:10