0

我有一个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)
    {

    }
}

谁能指导我获得复选框状态的最佳做法是什么?

4

2 回答 2

1

您能否尝试在中继器内的复选框控件中定义“CheckedChanged”方法:

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

然后您不必担心将处理程序绑定在后面的代码中。如果您没有获得正确的复选框状态,还请确保您在页面属性上有“EnableViewState”。

我希望这会有所帮助,如果我误解了这个问题,请告诉我

于 2013-07-31T16:20:22.507 回答
0

我有很脏的解决方案。我的问题是在转发器中触发复选框的回发,但我还需要记录的 ID。归档 ID 的最佳方法是使用 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);

如果有人有相同的需求可以使用这个解决方案。

于 2016-06-21T15:33:19.897 回答