在ASP.NET中,Update Panel内的按钮没有被触发。

3
<asp:ModalPopupExtender ID="MPE_EditGroup" runat="server" TargetControlID="btnShowPopup" PopupControlID="pnlpopup" CancelControlID="btnCancel" />
<asp:ToolkitScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <ContentTemplate>
        <asp:Panel ID="pnlpopup" runat="server">
            <asp:ListBox ID="lst_allmembers" DataValueField="FirstName" runat="server" />                       
            <asp:Button ID="btn_Add" runat="server" Text="Add" OnClick="btn_Add_Click" /><asp:ListBox ID="lst_grpmembers" runat="server" />
            <asp:Button ID="btn_remove" runat="server" Text="Remove" />
            <asp:Button ID="btnUpdate" CommandName="Update" runat="server" Text="Update" OnClick="btnUpdate_Click" />
            <asp:Button ID="btnCancel" runat="server" Text="Cancel" /></asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

添加按钮具有事件 OnClick="btn_Add_Click"。

  protected void btn_Add_Click(object sender, EventArgs e)
  {
        lst_grpmembers.Items.Add(lst_allmembers.SelectedItem.Text);
             }

当我点击添加按钮时,事件没有被触发,也没有任何反应。在添加update panel之前更新按钮是正常工作的,现在只有取消按钮能够关闭弹出窗口,其他按钮都无法在弹出窗口中使用。

如何触发该事件。


2
在您的脚本管理器中添加以下内容:asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="false" 这样我们就能获取更多关于错误的信息了。 - JonH
同时在btn_Add_Click处设置一个断点,看看它是否被触发。我的想法是这个错误不够具体,无法找到根本原因。将EnablePartialRendering设置为false以获取更多细节。 - JonH
执行了。在我添加<Triggers> <asp:Asy..之后,弹出窗口关闭并显示错误Microsoft JScript运行时错误:Sys.InvalidOperationException:处理程序未通过Sys.UI.DomEvent.addHandler方法添加。 - Mark
你有验证吗?你尝试过设置 CausesValidation="true" 来测试验证是否是原因了吗? - James Johnson
1个回答

4
将UpdatePanel的ChildrenAsTriggers属性更改为true。这将导致由UpdatePanel的子元素触发的任何后台提交都会更新其内容。
编辑:刚意识到btn_Add是一个嵌套控件,因此您需要显式地将其作为UpdatePanel触发器调用。在ContentTemplate之后,将以下内容添加到UpdatePanel标记中:
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btn_Add" /> 
</Triggers>

编辑 #2: 为了在异步 postback 发生时保持您的模态弹出窗口不关闭,将 UpdatePanel 移动到 ModalPopupExtender 的 PopupControlID 指定的面板内:

<asp:Panel ID="pnlpopup" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:ListBox ID="lst_allmembers" DataValueField="FirstName" runat="server" />
            <asp:Button ID="btn_Add" runat="server" Text="Add" OnClick="btn_Add_Click" />
            <asp:ListBox ID="lst_grpmembers" runat="server" />
            <asp:Button ID="btn_remove" runat="server" Text="Remove" />
            <asp:Button ID="btnUpdate" CommandName="Update" runat="server" Text="Update" OnClick="btnUpdate_Click" />
             <asp:Button ID="btnCancel" runat="server" Text="Cancel" />
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

错误:Sys.InvalidOperationException:处理程序未通过Sys.UI.DomEvent.addHandler方法添加。我应该为单击添加<asp:AsyncPostBackTrigger ControlID="btnUpdate_Click" />吗? - Mark
嗯,我怀疑问题是由于在UpdatePanel中存在ModalPopupExtender的取消按钮引起的。您能否从ModalPopupExtender中删除CancelControlID =“btnCancel”并查看错误是否仍然存在? - RoccoC5
它能够工作,但当我点击添加时,它会将所选项目添加到第二个列表框中并关闭弹出窗口,当我再次打开它时,添加的项目仍然存在,每次我点击添加时,弹出窗口都会关闭,重新打开时值仍然存在。 - Mark
好的,预期的行为是什么? - RoccoC5
在使用添加按钮将项目添加到列表后,我必须单击更新按钮,但是弹出窗口在我单击添加按钮后立即关闭。我希望弹出窗口在我单击添加按钮后仍然保持打开状态。 - Mark
请查看我的答案中的编辑#2。 - RoccoC5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接