2011-12-11 51 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的項目數,因爲當列表視圖中沒有任何項目時,彈出框面板通常會顯示在頁面上。再次感謝! –