2012-03-06 85 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