我以前见过这个问题,但没有一个答案对我有用。 这是我的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中)。
此更新面板中的其他控件(LinkButtons)(如lbBlock和lbUnblock)工作正常,不会导致完全回发!
请帮帮我。我花了太多时间在上面,似乎什么都没有用!
谢谢,
然
答案 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; }
}