2012-07-25 103 views
0

我以前見過這個問題,但沒有一個答案似乎適用於我。 這是我的UpdatePanel部分(內側hi.ascx):更新面板導致與usercontrol自定義事件全回發

<asp:UpdatePanel runat="server" ID="upUL" UpdateMode="Conditional" > 
<ContentTemplate> 

...

  <Angel:Pager id="pager" runat="server" OnPageClicked="Pager_PageSelected" /> 
     <!--End of control div--> 
</ContentTemplate> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="lbBlock" /> 
    <asp:AsyncPostBackTrigger ControlID="lbUnblock" /> 
    <asp:AsyncPostBackTrigger ControlID="pager" EventName="PageClicked" /> 
</Triggers> 
</asp:UpdatePanel> 

現在,這是Pager.ascx.vb中的代碼:

Public Delegate Sub ClickPage(sender As Object, e As PageClickedEventArgs) 
Public Event PageClicked As ClickPage 

Public Class PageClickedEventArgs 
    Inherits EventArgs 
    Public Property PageNumber() As Integer 
End Class 

...

Protected Sub rpPaging_Click(ByVal sender As Object, ByVal e As CommandEventArgs) 
    Dim pageNum As Integer 
    Integer.TryParse(e.CommandArgument.ToString(), pageNum) 
    If (pageNum <> 0) Then 
     Dim args As New PageClickedEventArgs 
     args.PageNumber = pageNum 
     RaiseEvent PageClicked(sender, args) 
    End If 
    'SelectNewPage(pageNum) 
End Sub 

And f最後,這是我在hi.ascx.vb頁上的代碼:

Public Sub Pager_PageSelected(sender As Object, ByVal e As Paging.PageClickedEventArgs) 
     BindData(False, e.PageNumber) 
    End Sub 

正如我在標題中所述。當我從pager.ascx中引發一個事件時,它會導致完整的回發(並且效果很好,但我希望它在Ajax中)。
此更新面板中的其他控件(LinkBut​​tons),如lbBlock和lbUnblock,運行良好,不會導致完全回發!

請幫助我。我花了太多時間在這件事上,似乎沒有任何工作!

感謝,

回答

3

這解決了這個問題暴露的事件:

Protected Sub rpPaging_onItemCreated(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) 

    Dim lb = e.Item.FindControl("lbPage") 
    If lb IsNot Nothing Then _ 
     ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(lb) 

End Sub 

顯然,一箇中繼器內的控制不會自動註冊自己。 所以我需要將其中的每一個添加到scriptmanager!

希望這將有助於有人出來......

0

asp.net不知道如何在客戶端跟蹤您PageClicked事件。所以觸發條件觸發不會發生。

如果此事件對應於您的自定義控件中的按鈕或鏈接按鈕的事件,請公開該事件,並且更新面板將使用該事件來跟蹤客戶端上的事件。

不太使用VB,你這是怎麼在c#

public event EventHandler PageChanged 
{ 
    add { grd.PageChanged += value; } 
    remove { grd.PageChanged -= value; } 
} 
+0

感謝,首先,如果是有條件的或不是不是問題。該事件總是導致全面回發。秒,我該如何「揭露那個事件」?我如何讓updatepanel跟蹤我的PageCliked事件? – Ran 2012-07-26 06:53:55

+0

即使沒有條件,也會導致完整的回發,這很奇怪。不應該發生。無法確定必須造成什麼。不太習慣vb,會發布c#的例子。 – nunespascal 2012-07-26 07:07:58

+0

C#很好。什麼是grd?它是gridview嗎?即時通訊使用中繼器,我沒有pageChange事件。並在哪裏把你的代碼?應該不是我的:「Public Sub Pager_PageSelected」函數? – Ran 2012-07-26 07:14:00