Значение флажка ASP.NET при обратной передаче внутри повторителя

У меня есть ASP Repeater, который содержит список тегов, и я хотел бы увидеть, какой из тегов был выбран (отмечен).

Нравиться:

<HeaderTemplate>
        <ul class="tags-list">
    </HeaderTemplate>
    <ItemTemplate>
        <asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' />
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>

Проблема, с которой я сталкиваюсь, заключается в том, что

protected override void InitializeControls(Telerik.Sitefinity.Web.UI.GenericContainer container, Telerik.Sitefinity.Web.UI.ContentUI.Contracts.IContentViewDefinition definition)

метод запускается до и:

    void tagList_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            var item = e.Item.DataItem as Taxon;
            var checkbox = e.Item.FindControl("tag") as CheckBox;
            checkbox.Text = item.Title;
            checkbox.CheckedChanged += new EventHandler(this.checkbox_Changed);

        }
    }

срабатывает каждый раз перед моим методом обратного вызова:

protected void checkbox_Changed(object sender, EventArgs e)
{
    CheckBox tagCheckbox = (CheckBox)sender;

    if (tagCheckbox.Checked)
    {

    }
}

Может ли кто-нибудь подсказать мне, как лучше всего получить состояние флажков?


person el.severo    schedule 23.05.2013    source источник
comment
tagList_ItemDataBound будет запущен, если вы привяжете свой повторитель к данным в page_load без !ispostback   -  person Emre    schedule 25.05.2013
comment
@Emre: Хорошо, спасибо! Но как мне получить состояние флажка? Размещение условия для привязки данных сделает tagList.Items.Count == 0.   -  person el.severo    schedule 25.05.2013
comment
вам нужно установить обработчик событий в itemdatabound? почему вы не используете OnCheckedChanged="checkbox_Changed" в своем флажке?   -  person Emre    schedule 25.05.2013
comment
@Emre: извините, но, кажется, я не понял, что вы имеете в виду. Обработчик событий устанавливается программно в tagList_ItemDataBound   -  person el.severo    schedule 25.05.2013
comment
я имею в виду, почему ты не используешь <asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' OnCheckedChanged="checkbox_Changed"/>   -  person Emre    schedule 25.05.2013
comment
@Emre: Потому что, если я добавлю OnCheckedChanged="checkbox_Changed", ретранслятор больше не будет отображаться ... Я не знаю, почему ...   -  person el.severo    schedule 25.05.2013
comment
давайте продолжим это обсуждение в чате   -  person el.severo    schedule 25.05.2013


Ответы (2)


не могли бы вы попробовать определить встроенный метод «CheckedChanged» с элементом управления флажком внутри повторителя:

<asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' CheckedChanged="checkbox_Changed" />

Тогда вам не нужно беспокоиться о привязке обработчика в коде позади. Если вы не получаете правильное состояние флажка, также убедитесь, что у вас есть «EnableViewState» в свойствах страницы.

Я надеюсь, что это полезно, дайте мне знать, если я неправильно понял вопрос

person SelAromDotNet    schedule 31.07.2013

У меня довольно грязный раствор. Моя проблема заключалась в том, чтобы запустить обратную передачу флажка в ретрансляторе, но мне также нужен идентификатор записи. Лучший способ заархивировать идентификатор — использовать атрибут ValidationGroup:

<asp:CheckBox ValidationGroup='<%# DataBinder.Eval(Container.DataItem,"id") %>' ID="YOUR_ID" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_Changed" />

и в коде позади:

CheckBox theCheckBox = (CheckBox)sender; 
int id = Convert.ToInt16(theCheckBox.ValidationGroup);

если кто-то имеет такие же потребности, может использовать это решение.

person user2950363    schedule 21.06.2016