OnCheckedChanged gestionnaire d'événement de l'asp:case à cocher ne se déclenche pas lorsque la case n'est pas cochée
J'ai un répéteur, chaque ItemTemplate de la répétition est un asp:case à cocher avec un OnCheckedChanged gestionnaire d'événement ensemble. Les cases ont la propriété AutoPostBack définie sur true. Lorsque toutes les cases à cocher est cochée, le gestionnaire d'événement se déclenche. Quand tout n'est pas cochée, le gestionnaire d'événement ne se déclenche pas.
Aucune idée pourquoi l'événement ne se déclenche pas, et comment je mgiht faire feu? Merci.
Simplifié de la répétition de code:
<asp:Repeater ID="rptLinkedItems" runat="server">
<ItemTemplate>
<asp:CheckBox ID="chkLinked" runat="server"
Checked="false" OnCheckedChanged="chkLinked_CheckedChanged" />
</ItemTemplate>
</asp:Repeater>
La collection est liée à la répétition comme suit:
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);
}
La OnItemDataBound gestionnaire d'événement est comme suit:
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());
}
}
La OnCheckedChanged gestionnaire d'événement est comme suit:
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 quelqu'un peut me dire aussi pourquoi markdown ne fonctionne pas correctement pour moi...
- RE: votre P. S. Vous n'étiez pas en train de faire. 😉 Essayez d'ouvrir cette question dans le mode edit, et voir ce que les modifications que j'ai apportées. Point clé 4 espaces de préfixe de code, que l'éditeur vous demande de le faire dans le panneau de droite.
- Merci Anthony, et désolé, j'ai manqué dans l'éditeur.
Vous devez vous connecter pour publier un commentaire.
C'est parce que le contrôle de la hiérarchie (et les cases à cocher en particulier) n'existent pas quand ASP.NET exécute la
Control events
partie de la ASP.NET la page du cycle de vie, comme vous l'aviez créé dans le plus tardPreRender
étapes. Veuillez voir ASP.NET Page vue d'ensemble du Cycle de Vie pour un aperçu plus détaillé de la séquence des événements.Je err sur le côté de la prudence pour @bleeeah conseils, pour vous assignez une valeur à
CheckBox.Checked
à l'intérieur derptLinkedItems_ItemDataBound
, qui serait également entraîner le gestionnaire d'événement à exécuter:Au lieu de cela, se déplacer:
Dans le
Page.Load
gestionnaire d'événement.Essayez d'utiliser
AutoPostBack="true"
comme ceci:Essayez de ré-abonnement à la CheckChanged événement dans votre OnItemDataBound événement ,
Utilisation
AutoPostBack="true"
comme ceci:Abonnez-vous à la CheckChanged événement dans votre Page_Init.
Vous devez définir un gestionnaire d'événements pour la liste de répétition de l'élément de commande, puis à l'intérieur de la répétition de l'élément de commande, passer à travers les éléments de vérification et d'obtenir les éléments cochés.
Dans le .page aspx, vous pouvez utiliser de l'Ajax et de l'updatepanel à feu gestionnaire d'événements, mais gardez à l'esprit que vous devez définir scriptmanage à l'extérieur de répétition.
//checklisk checkedchange gestionnaire
et l'élément de répétition de commande de l'élément:
//itération les éléments de vérification et de détecter vérifié