遇到了一些棘手的問題,所以在這邊將它整理一下。
ASPX內的程式
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
UpdateMode="conditional">
<ContentTemplate>
.....
</ContentTemplate>
</asp:UpdatePanel>
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
VB內的程式
Dim AjaxButton As New System.Web.UI.WebControls.Button
AjaxButton.ID = "XXX"
AjaxButton.Text = "XXX"
AjaxButton.UseSubmitBehavior = False '為了支援FireFox
AddHandler AjaxButton.Click, AddressOf Me.OnAjaxButton_Click
Me.UpdatePanel1.ContentTemplateContainer.Controls.Add(AjaxButton)
Dim trigger As New System.Web.UI.AsyncPostBackTrigger
trigger.ControlID = AjaxButton.ID
Me._UpdatePanelQ.Triggers.Add(trigger)
上面這段Code如果寫在Page Init中,那是沒有問題的,但是如果將它移到Page_Load中,就會有問題了,
它將可能造成非同步PostBack的Error,那此時就要另外加上下面的語法了。
先在外部宣告下面這一個Method
Private Shared triggerInitMethod As Reflection.MethodInfo = GetType(System.Web.UI.UpdatePanelTrigger).GetMethod("Initialize", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
這段Code緊接著在第一段Code的後面,去執行UpdatePanel的Initialize事件
If System.Web.UI.ScriptManager.GetCurrent(Me).IsInAsyncPostBack = True Then
triggerInitMethod.Invoke(trigger, Nothing)
End If
大功告成...
沒有留言:
張貼留言