我正在尝试更新cbxSupplement
触发器更新面板,但我不确定我是否使用了错误的EventName
,或者使用CheckBox
无法做到这一点。如果我将CheckBox
替换为Button
,则可以正常使用。
<asp:Repeater ID="repSupplements" runat="server">
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbxSupplement" />
</ItemTemplate>
</asp:Repeater>
<asp:UpdatePanel runat="server" ID="up1">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="repSupplements" EventName="CheckedChanged" />
</Triggers>
<ContentTemplate>
//Get checked items
</ContentTemplate>
</asp:UpdatePanel>
答案 0 :(得分:9)
由于设计时无法使用转发器内的CheckBox
控件,因此应使用ScriptManager.RegisterAsyncPostBackControl方法注册它们。此方法在页面或母版页上需要ScriptManager
。
为Repeater.OnItemCreated
事件创建一个处理程序,并在那里注册新创建的CheckBox
。代码如下(请注意CheckBox
应将AutoPostBack
属性设置为true):
<asp:Repeater ID="repSupplements" runat="server"
OnItemCreated="repSupplements_ItemCreated">
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbxSupplement" AutoPostBack="True" />
</ItemTemplate>
</asp:Repeater>
<asp:UpdatePanel runat="server" ID="up1">
<Triggers>
</Triggers>
<ContentTemplate>
//Get checked items
</ContentTemplate>
</asp:UpdatePanel>
代码隐藏:
protected void repSupplements_ItemCreated(object sender, RepeaterItemEventArgs e)
{
var control = e.Item.FindControl("cbxSupplement");
ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
}
这应该做你想要的。