UpdatePanel外的Repeater中的AsyncPostBackTrigger

mko*_*mko 3 asp.net updatepanel webforms repeater asynchronous-postback

我试图获得一个cbxSupplement触发器updatepanel刷新,但我不确定我是否使用了错误EventName或者它是不可能的CheckBox.如果我更换CheckBoxButton,它工作正常.

<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>
Run Code Online (Sandbox Code Playgroud)

Ale*_*kiy 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>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

protected void repSupplements_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    var control = e.Item.FindControl("cbxSupplement");
    ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
}
Run Code Online (Sandbox Code Playgroud)

这应该做你想要的.