【问题标题】:CheckBoxList gets cleared on button clickCheckBoxList 在按钮单击时被清除
【发布时间】:2012-03-16 03:38:28
【问题描述】:

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

列表和按钮的标记:

<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 事件无法再检索所选值。

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

【问题讨论】:

  • 我认为您在周期中添加项目为时已晚。将它们添加到 PreInit on Init:stackoverflow.com/questions/2724771/…
  • @jfmags 我已经尝试了您的建议,但列表不再显示。
  • @jfmags 我在 Page_Load 中设置了 LstYears,我也应该这样做 OnInIt 吗?
  • 是的 - 你必须在循环之前设置它 - 否则它不会有任何项目。
  • @jfmags 我将设置 LstYears 移动到 OnInIt 并且最初的问题仍然存在

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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我最初就是这样做的,但是 CheckBoxList 被清除了,一位程序员同事建议在 PreRender 上添加 CheckBoxList 项
  • Pre_Render 在生命周期中为时已晚,无法添加选项。结帐link 看看会发生什么以及何时发生。
  • 我也在 .aspx 文件的页面指令中将其设置为 true,但我检查了 web.config
  • 我添加了一个新页面并测试了您的代码,它似乎可以工作。我对两者都有相同的 web.config 文件
  • 我检查了 Page_Load 被触发了多少次,它在 PostBack 上被触发了两次
【解决方案2】:

我发现了这个问题,因为我将 AutoEventWireUp 设置为 true,因为 Keenan 建议如果我在 page_load 中执行它应该一切正常。

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

+1Keenan 为您提供帮助,并感谢您 (@jfmags) 告诉我您认为这是别的东西。

:D

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 2019-12-17
    • 2021-12-19
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多