我希望有人能帮助我在过去的几天里一直在努力解决这个问题。我一直在使用AJAX工具箱ModalPopupExtender外的ListViews非常好,但由于某种原因,我似乎不能包装我的头周围为什么这段代码不工作在一个ListView项目模板。
基本上,我想要实现的是:用户通过ListView呈现一些行数据,其中每行显示一个带有文本"Remove"的LinkButton。我希望用户能够点击这个链接,并弹出一个模态对话框,询问他们是否确定他们想这样做。如果他们单击ok按钮,它应该触发一个事件,执行必要的数据库工作并重新加载页面……如果没有,请取消回发请求并清除对话框。
使用下面的代码,我已经成功地通过ModalPopupExtender的targetid属性钩到链接按钮,因此对话框确实弹出。但是,ok按钮不会触发我编写的事件(我在事件的代码中放置了一个断点,因此不会触及它)。此外,取消按钮也不能像它在listview控件之外那样正常工作。我一定在这里遗漏了一些相当基本的东西,但我不知道-任何帮助都会非常感激。如果这个方法不可行,我当然愿意采用其他方法。
<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>
我终于可以让它工作了。不过这有点棘手。步骤如下:
- 将面板、按钮和modalpopupextender移出listview
- 创建
HiddenField
或其他控件,并将其与ModalPopupExtender
控件的TargetControlID
关联。 - 在ListView的按钮中处理Click事件,并在后面的代码中直接调用
ModalPopupExtender.Show()
方法,然后瞧。
它确实有点脏,但是ModalPopupExtender似乎在与控件关联时覆盖了listview按钮的单击事件。
似乎是一个问题与ModalPopupExtender上的数据绑定重复行。
愚蠢的想法#1:你可以尝试隐藏lnkRemoveUser,直到行被选中-然后,在SelectionChanged事件,突出显示行,显示按钮,并挂钩按钮到ModalPopupExtender?
愚蠢的想法#2:在ListView外面有一个隐藏的按钮,并将你的ModalPopupExtender连接到它。然后让你的链接按钮调用该按钮的onclick()。