我在寻找解决方案时遇到了同样的问题并发现了这个主题。我找到了它,所以我会发布它以帮助可能遇到相同问题的开发人员。
在你的 UserControl 中实现 IPostBackEventHandler 接口:
Public Class UserControl_Rattachement
Inherits System.Web.UI.UserControl
Implements ICallbackEventHandler, IPostBackEventHandler
在 RaisePostBackEvent 函数中,调用 UpdatePanel 的 Update() 方法:
Public Sub RaisePostBackEvent(eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
// Code executed during the PostBack
UpdatePanel1.Update()
End Sub
在 UserControl 的 Page_Load 方法中,将 PostBack 定义为异步:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(Me)
End Sub
现在在 Render 方法中添加客户端脚本:
Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
MyBase.Render(writer)
Dim postbackReference As String = Page.ClientScript.GetPostBackEventReference(Me, Nothing, True)
Dim postbackScript As String = String.Format("function updateRattachement() {{ {0}; }}", postbackReference)
writer.WriteLine("<script type=""text/javascript"">")
writer.WriteLine(postbackScript)
writer.WriteLine("</script>")
End Sub
然后,在需要时调用您的客户端函数:
updateRattachement();
PostBack 将是异步的,这将刷新您指定的 UpdatePanel。
我希望这会有所帮助,对不起我的英语。