[英]Adding PostBackTrigger and AsyncPostBackTriggers to UpdatePanel for dynamically generated checkboxes with checkedChanged EventHandler
有關更明確的解釋,請.asp
文件中的代碼:
<asp:UpdatePanel ID="updPnlTabs" runat="server" >
<Triggers>
<asp:PostBackTrigger ControlID="btnSave" />
</Triggers>
<ContentTemplate>
<asp:Panel ID="pnlCheckList" runat="server" style="margin-bottom: 10px;" CssClass="listingDummyTab">
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
在我的.cs
代碼中,我動態創建了checkebox到pnlCheckList,如下所示:
CheckBox chkModuleID = new CheckBox();
chkModuleID.ID = drNew[def.ID].ToString();
chkModuleID.AutoPostBack = true;
chkModuleID.CheckedChanged += new EventHandler(chkID_OnRow_Check);
pnlCheckList.Controls.Add(chkModuleID);
現在我的問題是當我更改復選框時,必須加載整個頁面而不是UpdatePanel
的內容。 請注意,動態創建的復選框的EventHandler正在觸發,但不在UpdatePanel內。
如何在UpdatePanel
<Triggers>
中添加動態創建的Controls
的ID
?
無法向標記添加動態(或編程創建)控件,因此,必須在創建ScriptManager
后使用ScriptManager
注冊該控件。
根據AsyncPostBackTrigger
文檔 ,不支持以編程方式添加AsyncPostBackTrigger
控件:
若要以編程方式注冊回發控件,請使用
ScriptManager
控件的RegisterAsyncPostBackControl
方法。 然后在控件回發時調用UpdatePanel
控件的Update方法。
基本上你應該做的是在創建CheckBox控件之后注冊它。
// original code
CheckBox chkModuleID = new CheckBox();
chkModuleID.ID = drNew[def.ID].ToString();
chkModuleID.AutoPostBack = true;
chkModuleID.CheckedChanged += new EventHandler(chkID_OnRow_Check);
pnlCheckList.Controls.Add(chkModuleID);
// register the control to cause asynchronous postbacks
ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(chkModuleID);
重要提示:在chkID_OnRow_Check
回調/事件處理程序函數內部,確保調用UpdatePanel1.Update()
。
更新2013-02-20
由於我對您收到的異常的理解,請考慮使CheckBox ID唯一。
// One possibility is this - assuming you don't require a consistent ID
chkModuleID.ID = String.Format("{0}-{1}", drNew[def.ID].ToString(), Guid.NewGuid().ToString("N"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.