【问题标题】:CheckboxList not setting Selected with Viewstate disabledCheckboxList 未设置 Selected with Viewstate disabled
【发布时间】:2010-04-27 20:20:28
【问题描述】:

我有一个 CheckboxList 似乎可以加载并正确执行所有操作,除了当我执行回发时,它不会设置 Item.Selected 属性。我为整个页面禁用了视图状态。

我像这样加载它(在每次加载时在 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 循环,但没有选择任何项目。这可能是什么原因?

【问题讨论】:

  • 我是否正确阅读了您的帖子,因为您的视图状态已禁用
  • @ahs 是的,对于整个页面。页面上还有其他一些东西不能很好地与视图状态配合使用,另外还有一些性能方面需要考虑
  • @ahs 啊,现在我看到了我的错字:P 已更正。

标签: c# asp.net postback checkboxlist


【解决方案1】:

如果您在每次 Page_Load 调用时都填写它,而不仅仅是在 Page.IsPostback = false 时,那么您将在回发时重置客户端选择。

编辑 您应该在 PreInit 或 Init 事件中添加您的项目,然后您将能够正确保留所选项目。

protected void Page_Init(object sender, EventArgs e)
{
    foreach (DataRow service in d.Tables[0].Rows)
    ...
}

【讨论】:

  • @Cla 是的,但是如果我不再添加项目(当 Page.IsPostback==true 时),那么当它到达 _Click 的 foreach 时,它就没有任何 ListItems
  • @Cla(您的编辑)我无权访问 Page_PreInit(在 UserControl 中工作)。另外,这甚至没有意义,因为 PreInit 中尚不存在控件
  • @Earlz:保持动态添加控件状态的唯一方法是在 init / preInit 事件中添加它们。 msdn.microsoft.com/en-us/library/…。您能否尝试使用 OnInit 事件。不知道这是一个用户控件
  • 是的,我正在尝试让我的代码移动。只是移动并不是最简单的事情,因为它是动态的..
  • 好的,现在可以了。即使我讨厌这个答案,也接受这个,因为这意味着必须以某种方式将一些动态的东西移到 Page_Init 中。我讨厌页面生命周期..
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多