单击按钮后,CheckBoxList将被清除

时间:2012-03-06 14:25:39

标签: c# asp.net visual-studio-2010 sharepoint-2010 checkboxlist

我正在使用ASP.NET(Visual C#)在SharePoint可视化Web部件中创建自定义视图,并具有CheckBoxList和按钮。

MarkUp for the List&按钮:

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

我将项目添加到PreRender上的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事件无法再检索所选值。

关于可能导致此行为的任何想法?

2 个答案:

答案 0 :(得分:1)

您是否尝试将checkboxlist的绑定移动到page_load而不是pre_render?只是一个想法,因为看起来页面在回发时丢失了选项,并且每次都重新生成选项。

更新:我创建了一个快速页面,这可以正常工作。您是否在页面指令中的整个页面或者可能在web.config中关闭了viewstate?我看到你在复选框列表中启用了它,但也许有一个全局设置会让你失望。

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); }

答案 1 :(得分:0)

我想出了这个问题,因为我将AutoEventWireUp设置为true,因为Keenan已经建议如果我在page_load中执行它会全部工作。

问题是Page_Load被调用了两次,我发现这是因为我使用QueryString参数将用户重定向到相同的URL。在我做了急需的更改之后,我的代码运行得非常好。

+1 Keenan感谢您的帮助,感谢您(@jfmags)告诉我您认为这是其他事情。

:d