2013-07-14 20 views
4

在我的用戶控制,我有以下的標記:如何讓我的轉發器的Itemcommand事件不完整頁面回發?

<div id="pageEditsView" style="margin-left:540px"> 
    <asp:UpdatePanel runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="PageEditList"/> 
     </Triggers> 
     <ContentTemplate> 
      <asp:HiddenField runat="server" ID="CurrentPageId"/> 
      <asp:Label runat="server" ID="EditDisplayLabel" Visible="False">Edits tied to this page:</asp:Label> 
      <br/> 
      <ul> 
       <asp:Repeater runat="server" ID="PageEditList" OnItemCommand="PageEditList_ItemCommand"> 
        <ItemTemplate> 
         <li> 
          <%# ((PageEdit)Container.DataItem).CachedName %> 
          (<asp:LinkButton ID="LinkButton1" runat="server" Text="remove" CommandName="remove" CommandArgument="<%# ((PageEdit)Container.DataItem).Id %>" />) 
         </li>  
        </ItemTemplate> 
       </asp:Repeater> 
      </ul> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

每當我點擊刪除鏈接按鈕,它正在執行一個完整的網頁提交,而不是隻更新該控件的面板。我的母版頁有如下設置:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" /> 

這個應用程序的其他部分(我繼承,老dev的誰寫的這不再是左右)似乎做局部頁面更新就好了。難道我做錯了什麼?

+1

我相信問題是觸發的控件whoes事件不是PageEditList,而是其中的刪除按鈕。因此,您必須遍歷所有按鈕,並將所有刪除按鈕註冊爲在後面的代碼中異步。也許可以使用中繼器的OnItemCreated Event來完成此操作。 –

回答

8

嘗試註冊LinkBut​​ton的as async postback control,適當的地方是ItemCreated事件被觸發每一個(異步/全)回傳:

protected void PageEditList_ItemCreated(Object Sender, RepeaterItemEventArgs e) 
{ 
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     ScriptManager scriptMan = ScriptManager.GetCurrent(this); 
     LinkButton btn = e.Item.FindControl("LinkButton1") as LinkButton; 
     if(btn != null) 
     { 
      btn.Click += LinkButton1_Click; 
      scriptMan.RegisterAsyncPostBackControl(btn); 
     } 
    } 
} 
+0

工作!非常感謝:) – KallDrexx

+0

當我這樣做(要麼有更新面板內部或外部的更新面板內容我得到這個錯誤的javascript:ncaught TypeError:無法讀取未定義的屬性'ID'。我檢查時,我的鏈接按鈕都顯示ID元素 – JDPeckham

+0

我很困惑,我目前正在維護一個WebForms,並且自從我做了最後一個WebForms項目以來已經接近10年了,但我不記得曾經這樣做過,以便讓Repeater Itemcommand事件與UpdatePanel一起工作。在同一個表單上,我有一個Repeater外的按鈕,它觸發UpdatePanel沒有任何問題。 – Pete

1

的ContentTemplate後添加此

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="PageEditList" EventName="ItemCommand" />    
    </Triggers> 
+0

不行,那沒有奏效: -/ – KallDrexx

+0

在更新面板上設置'UpdateMode ='Conditional''''和'ChildrenAsTriggers =「false」',這對我來說很好。 – GJKH

+0

沒有爲我在asp.net 4.0上用我需要的ChildrenAsTriggers =「true」工作。 – JDPeckham

相關問題