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.
InformationsquelleAutor Jason | 2009-09-10