我有一个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)
{
}
}
任何人都可以指导我获取复选框状态的最佳做法吗?
答案 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);
如果某人有相同的需求,可以使用此解决方案。