2013-03-05 171 views
3

我試圖得到一個cbxSupplement觸發UpdatePanel的刷新外的中繼器,但我不知道如果我使用的是錯誤的EventName或者它僅僅是不可能的CheckBox做到這一點。如果我用Button替換CheckBox,它工作正常。AsyncPostBackTrigger在UpdatePanel的

<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> 

回答

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); 
} 

這應該做你想要什麼。

+0

工程就像一個魅力。 :) – Rainhider 2015-03-24 15:35:48

相關問題