【问题标题】:Code-behind created Checkboxlist wont fire OnSelectedIndexChanged in UpdatePanel代码隐藏创建的 Checkboxlist 不会在 UpdatePanel 中触发 OnSelectedIndexChanged
【发布时间】:2015-06-30 15:48:14
【问题描述】:

我在代码隐藏(在 Page_Load 中)中创建了许多 CheckboxList 控件,它们被放入 UpdatePanel 中。 UpdatePanel 是为 UpdateMode="always" 设置的,所以如果我理解正确,这个 UpdatePanel 中的每个 Postback 都应该触发整个 Updatepanel 的 Postback(这就是我想要的)。

简化的 aspx 标记:

<asp:UpdatePanel ID="updatepanel_profiles_manualdata" runat="server">
<ContentTemplate>
<div id="cbl_container" runat="server">
</div>
</ContentTemplate>
</asp:UpdatePanel>    

简化的代码隐藏:

protected void create_cbl(){
// this is called in Page_Load
CheckBoxList mycbl = new CheckBoxList();
mycbl.SelectedIndexChanged += new EventHandler(cbl_manual_clickEvent);

DataTable dt3 = get_cbl_data(someparameter);
mycbl.DataSource = dt3;
mycbl.DataTextField = "Title";
mycbl.DataValueField = "ID";
mycbl.AutoPostBack = true;
mycbl.DataBind();

//add the checkboxlist to the container-div in the aspx-markup
cbl_container.Controls.Add(mycbl);
}

protected void cbl_manual_clickEvent(object sender, EventArgs e){
// do something with this click...
}

奋斗

  1. 我尝试在我的 cbl_manual_clickEvent 中设置一个断点 - 它永远不会到达,但页面编译时没有错误。
  2. 我在同一个 UpdatePanel 中有另一个 CheckBoxList,在标记中初始化,因此 OnSelectedIndex 事件绑定在标记中。回发在这里工作得很好。但是,我需要从代码隐藏中创建第二个 CheckBoxList,因为数量取决于数据库中的某些数据。
  3. 我尝试在 UpdatePanel 中设置 ChildrenAsTriggers="true",以及更改 UpdateMode 和定义触发器,但没有任何运气。

我错过了什么?提前感谢所有提示或建议...!

【问题讨论】:

  • post 你是如何在 Page_Load 中调用这个函数的
  • 尝试在!IsPostBack条件下调用该函数
  • 是的,我第一次在 !Page.IsPostBack 中调用了这个函数,除了在那里创建的一些其他控件。
  • 尝试在条件 !Page.IsPostBack 之外分配事件处理程序
  • 我的控件仅在第一次执行页面时调用的函数中创建(因此在 !Page.IsPostBack 中)。您建议在该功能之后我尝试找到那些创建的控件并为它们分配 OnSelectedIndexChanged 事件? (只是要求你做对!)

标签: c# asp.net ajax updatepanel


【解决方案1】:

试试这个 .aspx 文件:

<asp:UpdatePanel ID="updatepanel_profiles_manualdata" runat="server">
<ContentTemplate>
<div id="cbl_container" runat="server">
<asp:CheckBoxList ID="CheckBoxList1" AutoPostBack="true" runat="server"></asp:CheckBoxList>
</div>
</ContentTemplate>
</asp:UpdatePanel>   

后面的代码

protected void Page_Load(object sender, EventArgs e)
{
CheckBoxList1.SelectedIndexChanged += new EventHandler(cbl_manual_clickEvent);
DataTable dt3 = get_cbl_data(someparameter);
CheckBoxList1.DataSource = dt3;
CheckBoxList1.DataTextField = "Title";
CheckBoxList1.DataValueField = "ID";
CheckBoxList1.AutoPostBack = true;
CheckBoxList1.DataBind();

}

#update1 see this answer

【讨论】:

  • (我已经对此发表了评论,是否已删除?但是..)这对我不起作用。我无法在代码隐藏中创建 CheckBoxList 控件。在标记中构建一个 CheckBoxList 并将其连接起来不是问题。为 UpdatePanel 动态创建它们,然后将它们与它们的事件挂钩是关键。
  • 这对我没有帮助。做了一个解决方法,但感谢您@Feras 的努力。
【解决方案2】:

您是否尝试过 CheckBoxList 的AutoPostBack=true

【讨论】:

  • 是的,如代码隐藏中所示.. mycbl.AutoPostBack = true;它做了一些回发,但它不会触发它应该触发的事件。
  • 明确定义了 AutoPostBack=true 这不是一个答案,您应该将其视为评论
  • Stackoverflow 不允许我发表评论
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多