2011-12-11 54 views
1

我希望有人能够帮助我解决这个问题,我一直在努力过去的几天。我一直在使用ListViews之外的AJAX工具包ModalPopupExtender,但是由于某种原因,我似乎无法包装我的头,因为这些代码并不适用于ListView项目模板。ASP.NET AJAX工具包ModalPopupExtender里面的ListView行为

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

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

我必须在这里错过一些相当重要的东西,但我很茫然 - 任何帮助都将不胜感激。如果这种方法不可行,我肯定会接受替代方法。

<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> 

回答

3

最后我可以使这个作品。虽然这有点棘手。以下是具体步骤:

  1. 移动面板,按钮关闭和modalpopupextender列表视图外
  2. 创建HiddenField或任何控制,并与ModalPopupExtender控制的关联TargetControlID此。
  3. 在ListView的按钮上处理Click事件,并在代码后面直接调用ModalPopupExtender.Show()方法和voilá。

确实有点肮脏,但ModalPopupExtender似乎覆盖了与控件关联的listview按钮的click事件。

0

似乎在数据绑定重复行上使用ModalPopupExtender时出现问题。

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

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

+0

谢谢!其实,“愚蠢的想法#2”让我想到了同一条轨道。最终工作的是保持ItemTemplate中的ModalPopupExtender代码,但将PopupPanel移动到列表视图之外允许模式框的两个按钮正常工作。唯一出现这个问题的是必须在列表被绑定后检查listview的项目数,因为当列表视图中没有任何项目时,弹出框面板通常会显示在页面上。再次感谢! –