在转发器内部回发时的ASP.NET复选框值

时间:2013-05-23 16:00:12

标签: asp.net checkbox repeater sitefinity sitefinity-5

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

    }
}

任何人都可以指导我获取复选框状态的最佳做法吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用转发器内的复选框控件内联定义“CheckedChanged”方法:

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

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

我希望这有用,如果我误解了这个问题,请告诉我。

答案 1 :(得分: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);

如果某人有相同的需求,可以使用此解决方案。