当取消选中复选框时,asp:复选框的OnCheckedChanged事件处理程序不会触发
我有一个转发器,在转发器的每个ItemTemplate中都是一个带有OnCheckedChanged事件处理程序集的asp:复选框。 复选框将AutoPostBack属性设置为true。 选中任何复选框时,将触发事件处理程序。 如果未选中任何内容,则不会触发事件处理程序。
知道为什么事件不会发生,以及我如何解雇它? 谢谢。
简化的转发器代码:
该集合与转发器绑定如下:
protected override void OnPreRenderComplete(EventArgs e) { if (!Page.IsPostBack) { m_linkedItems = GetLinkedItems(); rptLinkedItems.DataSource = GetLinkableItems(); rptLinkedItems.ItemDataBound += new RepeaterItemEventHandler (rptLinkedItems_ItemDataBound); rptLinkedItems.DataBind(); } base.OnPreRenderComplete(e); }
OnItemDataBound事件处理程序如下:
private void rptLinkedItems_ItemDataBound(Object sender, RepeaterItemEventArgs args) { if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem) { CategoryItem item = args.Item.DataItem as CategoryItem; Literal litItemName = args.Item.FindControl("litItemName") as Literal; CheckBox chkLinked = args.Item.FindControl("chkLinked") as CheckBox; litItemName.Text = item.Text; chkLinked.Checked = IsItemLinked(item); chkLinked.AutoPostBack = true; chkLinked.InputAttributes.Add("Value", item.Id.ToString()); } }
OnCheckedChanged事件处理程序如下:
protected void chkLinked_CheckedChanged(Object sender, EventArgs args) { CheckBox linkedItem = sender as CheckBox; Boolean itemState = linkedItem.Checked; Int32 itemId = Int32.Parse(linkedItem.InputAttributes["Value"].ToString()); DataAccessLayer.UpdateLinkedItem(m_linkingItem, Utilities.GetCategoryItemFromId(itemId), itemState); }
PS如果有人也能告诉我为什么降价对我不起作用…
这是因为当ASP.NET执行ASP.NET页面生命周期的Control events
部分时,控件层次结构(特别是复选框)不存在,就像您在后面的PreRender
阶段中创建它们一样。 有关事件序列的更详细概述,请参阅ASP.NET页面生命周期概述 。
我会谨慎对待@ bleeeah的建议,因为你在rptLinkedItems_ItemDataBound
为CheckBox.Checked
rptLinkedItems_ItemDataBound
,这也会导致事件处理程序执行:
chkLinked.Checked = IsItemLinked(item);
相反,移动:
if (!Page.IsPostBack) { m_linkedItems = GetLinkedItems(); rptLinkedItems.DataSource = GetLinkableItems(); rptLinkedItems.ItemDataBound += new RepeaterItemEventHandler (rptLinkedItems_ItemDataBound); rptLinkedItems.DataBind(); }
进入Page.Load
事件处理程序。
尝试使用AutoPostBack="true"
如下所示:
尝试重新订阅OnItemDataBound事件中的CheckChanged事件,
chkLinked.CheckedChanged += new EventHandler(chkLinked_CheckedChanged);
像这样使用AutoPostBack="true"
:
订阅Page_Init中的CheckChanged事件。
您必须在repeater item命令中为checklist定义eventhandler,然后在repeater item命令中,检查清单项并获取检查项。
在.aspx页面中,您可以使用Ajax和updatepanel来触发事件处理程序,但请记住,您必须在转发器之外定义脚本管理。
// checklisk checkedchange eventhandler
protected void chkLinked_CheckedChanged(Object sender, EventArgs args) { }
和项目转发器命令项://迭代核对表项并检测已检查
上述就是C#学习教程:当取消选中复选框时,asp:复选框的OnCheckedChanged事件处理程序不会触发分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
protected void Repeater1_ItemCommand(object sender, RepeaterCommandEventArgs e) { CheckBoxList cbl = (CheckBoxList)e.Item.FindControl("CheckBoxList1"); cbl.SelectedIndexChanged += new EventHandler(chkLinked_CheckedChanged); string name = ""; for (int i = 0; i < cbl.Items.Count; i++) { if (cbl.Items[i].Selected) { name += cbl.Items[i].Text.Split(',')[0] + ","; } } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033852.html