AsyncPostBackTrigger в повторителе вне UpdatePanel
Я пытаюсь получить 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>
1 ответ
Решение
Поскольку 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>
Codebehind:
protected void repSupplements_ItemCreated(object sender, RepeaterItemEventArgs e)
{
var control = e.Item.FindControl("cbxSupplement");
ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
}
Это должно делать то, что вы хотите.