簡體   English   中英

使用checkedChanged EventHandler將PostBackTrigger和AsyncPostBackTriggers添加到UpdatePanel以獲取動態生成的復選框

[英]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>中添加動態創建的ControlsID

無法向標記添加動態(或編程創建)控件,因此,必須在創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM