【问题标题】:Adding PostBackTrigger and AsyncPostBackTriggers to UpdatePanel for dynamically generated checkboxes with checkedChanged EventHandler将 PostBackTrigger 和 AsyncPostBackTriggers 添加到 UpdatePanel 以使用 checkedChanged EventHandler 动态生成复选框
【发布时间】:2013-02-07 02:14:20
【问题描述】:

为了更清楚的解释,这是我在.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 代码中,我动态地为 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&lt;Triggers&gt; 中添加动态创建的ControlsID

【问题讨论】:

标签: c# asp.net


【解决方案1】:

无法将动态(或以编程方式创建的)控件添加到标记中,因此,您必须在创建控件后将其注册到ScriptManager

根据AsyncPostBackTriggerdocumentation,不支持以编程方式添加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 年 2 月 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"));

【讨论】:

  • 我不明白,但它仍然继续添加相同的触发器。
  • @BlackHatShadow 您的意思是每次都添加触发器,还是您看到其他副作用?你能详细说明一下吗?
  • 当我尝试填充面板(包括触发器)时,触发器再次添加了多个 ID's 的运行时错误
  • 如何检查我的 UpdatePanel 中是否存在现有触发器?顺便感谢您的关注和努力。
  • 您能更新一下您收到的异常问题吗?此外,请确保您拥有 chkModuleID 的唯一 ID,请参阅 2013-02-20 更新。
猜你喜欢
  • 2011-03-16
  • 2011-06-12
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多