【问题标题】:ASP.NET AJAX Toolkit ModalPopupExtender inside ListView behaviorListView 行为中的 ASP.NET AJAX 工具包 ModalPopupExtender
【发布时间】:2011-12-11 15:36:36
【问题描述】:

我希望有人可以帮助我了解我过去几天一直在努力解决的这个问题。我一直在 ListViews 之外使用 AJAX Toolkit ModalPopupExtender 非常好,但由于某种原因,我似乎无法理解为什么这段代码在 ListView 项目模板中不起作用。

基本上,我想要实现的是:通过 ListView 向用户呈现一些数据行,其中每一行显示一个带有文本“删除”的 LinkBut​​ton。我希望用户能够单击此链接,然后会弹出一个模式对话框并询问他们是否确定要这样做。如果他们单击确定按钮,它应该触发一个事件并执行必要的数据库工作并重新加载页面......如果没有,取消回发请求并清除对话框。

使用下面的代码,我已经通过 ModalPopupExtender 的 targetid 属性成功连接到链接按钮,因此对话框确实弹出。但是,ok 按钮不会触发我编写的事件(我在事件的代码隐藏中放置了一个断点,它没有被触及)。此外,取消按钮不能正常工作,因为它通常会在列表视图控件之外。

我必须在这里遗漏一些相当基本的东西,但我不知所措 - 任何帮助将不胜感激。如果这不可行,我当然愿意接受其他方法。

<ItemTemplate>
        <tr>
            <td align="center">
                <asp:Label runat="server" ID="lblUserID" Text='<%# Eval("USERID") %>' Visible="false" />
                <asp:LinkButton runat="server" ID="lnkRemoveUser" Text="Remove" /> 

                <asp:Panel ID="removeUserModalPanel" runat="server">
                    <div class="popup">
                        <div class="loginTitleBar" id="Div1">
                            Remove User
                        </div>
                        <div class="popupBody">
                            <p>
                                Are you sure you want to remove this user?
                            </p>
                        </div>
                        <div class="popupControls">
                            <asp:Button id="btnRemoveUserOkay" runat="server" type="button" Text="Remove User" 
                                onclick="btnRemoveUserOkay_Click" />
                            <input id="btnRemoveUserCancel" type="button" value="Cancel" />
                        </div>
                    </div>
                </asp:Panel>

                <asp:ModalPopupExtender 
                    ID="removeUserModalPopupExtender" 
                    runat="server"
                    BackgroundCssClass="ModalPopupBG"
                    CancelControlID="btnRemoveUserCancel"
                    TargetControlID="lnkRemoveUser"
                    PopupControlID="removeUserModalPanel"
                    drag="false" >
                </asp:ModalPopupExtender>
            </td>
            <td>
                <asp:LinkButton ID="lnkUserName" runat="server" Text='<%# Eval("USERNAME") %>' />
            </td>
            <td>
                <asp:Label ID="lblFirstName" runat="server" Text='<%# Eval("FIRSTNAME") %>' />
            </td>
            <td>
                <asp:Label ID="lblLastName" runat="server" Text='<%# Eval("LASTNAME") %>' />
            </td>
            <td>
                <asp:Label ID="lblEmailAddress" runat="server" Text='<%# Eval("EMAILADDRESS") %>' />
            </td>
        </tr>
    </ItemTemplate>

【问题讨论】:

    标签: c# asp.net ajax listview ajaxcontroltoolkit


    【解决方案1】:

    我终于可以做到这一点了。不过这有点棘手。步骤如下:

    1. 将面板、按钮关闭和 modalpopupextender 移到列表视图之外
    2. 创建一个HiddenField 或任何控件,并将其与ModalPopupExtender 控件的TargetControlID 相关联。
    3. 在 ListView 上的按钮中处理 Click 事件,并在后面的代码中直接调用 ModalPopupExtender.Show() 方法,瞧。

    确实有点脏,但是 ModalPopupExtender 在与控件关联时似乎覆盖了列表视图按钮的单击事件。

    【讨论】:

      【解决方案2】:

      在数据绑定的重复行上设置 ModalPopupExtender 似乎是个问题。

      愚蠢的想法 #1:您能否尝试隐藏 lnkRemoveUser 直到选中该行 - 然后在 SelectionChanged 事件中突出显示该行,显示按钮,并将按钮挂接到 ModalPopupExtender?

      愚蠢的想法 #2:在 ListView 之外有一个隐藏按钮,并将您的 ModalPopupExtender 连接到该按钮。然后让您的链接按钮调用该按钮的 onclick ()。

      【讨论】:

      • 谢谢!实际上,“愚蠢的想法#2”让我在同一条轨道上思考。最终的工作是将 ModalPopupExtender 代码保留在 ItemTemplate 中,但是将 PopupPanel 移到列表视图之外允许模态框的两个按钮正常工作。由此产生的唯一问题是在绑定列表后必须检查列表视图的项目计数,因为当列表视图中没有任何要列出的项目时,弹出框面板会正常显示在页面上。再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多