Tengo un repetidor, en cada ItemTemplate del repetidor es una casilla de verificación asp: con un controlador de eventos OnCheckedChanged establecido. Las casillas de verificación tienen la propiedad AutoPostBack establecida en verdadero. Cuando se marca cualquiera de las casillas de verificación, el controlador de eventos se activa. Cuando se desactiva cualquiera, el controlador de eventos no se activa.Controlador de eventos OnCheckedChanged de asp: la casilla de verificación no se activa cuando la casilla de verificación está desactivada
¿Alguna idea de por qué el evento no se dispara y cómo puedo disparar? Gracias.
simplificado código repetidor:
<asp:Repeater ID="rptLinkedItems" runat="server">
<ItemTemplate>
<asp:CheckBox ID="chkLinked" runat="server"
Checked="false" OnCheckedChanged="chkLinked_CheckedChanged" />
</ItemTemplate>
</asp:Repeater>
La colección se une al repetidor de la siguiente manera:
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);
}
El controlador de eventos OnItemDataBound es el siguiente:
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());
}
}
El evento OnCheckedChanged controlador es el siguiente:
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);
}
P.S. Si alguien también me puede decir por qué rebaja no funciona correctamente para mí ...
@ Jibberish: RE: tu PS No estabas haciendo lo correcto. ;) Intente abrir esta pregunta en modo de edición y vea qué cambios hice. Punto clave 4 espacios para prefijar código, que el editor le indica que debe hacer en el panel de la derecha. – AnthonyWJones
Gracias Anthony, y lo siento, lo eché de menos en el editor. – Jason