Updatepanel使用usercontrol自定义事件导致完全回发

时间:2012-07-25 14:50:50

标签: asp.net ajax vb.net updatepanel

我以前见过这个问题,但没有一个答案对我有用。 这是我的updatePanel部分(在hi.ascx中):

<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

最后,这是我在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)工作正常,不会导致完全回发!

请帮帮我。我花了太多时间在上面,似乎什么都没有用!

谢谢,

2 个答案:

答案 0 :(得分: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

显然,转发器中的控件不会自动注册... 所以我需要将它们中的每一个添加到脚本管理器中!

希望对那里的人有所帮助......

答案 1 :(得分:0)

asp.net不知道如何在客户端跟踪您的PageClicked事件。因此,不会发生触发条件触发器。

如果此事件与自定义控件中的按钮或链接按钮事件相对应,则公开该事件,更新面板将使用该事件在客户端跟踪事件。

不习惯VB,这就是你在c#

中公开事件的方式
public event EventHandler PageChanged
{
    add { grd.PageChanged += value; }
    remove { grd.PageChanged -= value; }
}