Обработчик событий OnCheckedChanged asp:checkbox не стреляет, когда флажок неконтролируем

У меня есть повторитель, в каждом ItemTemplate повторителя asp:checkbox с набором обработчика событий OnCheckedChanged. Флажки имеют набор свойств AutoPostBack к истинному. Когда любой из флажков проверяется, огни обработчика событий. Когда любой неконтролируем, обработчик событий не стреляет.

Какая-либо идея, почему событие не стреляет, и как я мог бы заставить его стрелять?Спасибо.

Упрощенный код повторителя:

<asp:Repeater ID="rptLinkedItems" runat="server">            
    <ItemTemplate>      
    <asp:CheckBox ID="chkLinked" runat="server" 
     Checked="false" OnCheckedChanged="chkLinked_CheckedChanged" />
    </ItemTemplate>    
</asp:Repeater>

Набор связывается с повторителем следующим образом:

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);
}

P.S. Если кто-то может также сказать мне, почему скидка с цены не работает правильно на меня...

24
задан Tobias Tengler 25 July 2019 в 17:45
поделиться

3 ответа

Это связано с тем, что иерархия элементов управления (и, в частности, флажки) не существует, когда ASP.NET выполняет часть События управления из жизненный цикл страницы ASP.NET, как вы создали их на более поздних этапах PreRender . См. Обзор жизненного цикла страницы ASP.NET для более подробного обзора последовательности событий.

16
ответ дан 28 November 2019 в 22:36
поделиться

Попробуйте повторно подписаться на событие CheckChanged в вашем событии OnItemDataBound,

chkLinked.CheckedChanged += new EventHandler(chkLinked_CheckedChanged);
5
ответ дан 28 November 2019 в 22:36
поделиться

Подпишитесь на событие CheckChanged в вашем Page_Init.

2
ответ дан 28 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: