.Net 2.0 增新 CallBack功能,看書上說是 AJAX 模式,可以不用整首刷新,可是實際測試結果,它還是整頁刷新,並沒有 AJAX 功能。
我的測試方式如下:(只有一頁 Default.aspx)
一、在置程式碼手動加入(紅字部分)
Partial Class _Default
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
Protected retValue As String
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Dim pp As String = retValue
retValue = ""
Return pp
End Function
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
retValue = retValue & eventArgument
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'If Not (IsCallback OrElse IsPostBack) Then
retValue = "PageLoad"
Dim cbRef As String
cbRef = Page.ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "context")
Dim callBackScript As String = ""
callBackScript += "function CallServer1(arg, context) {" & cbRef & "};" & vbCrLf
callBackScript += "function CallServer2(arg, context) {" & cbRef & "};" & vbCrLf
callBackScript += "function CallServer3(arg, context) {" & cbRef & "};" & vbCrLf
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CallServer", callBackScript, True)
' End If
End Sub
End Class
二、在Default.aspx 內拉三個 Button,並分別設定 onClientClick=onButton?() (? = 1, 2, 3)
三、在Default.asxp 內手動加入 JavaScript 如下:
function onButton1() { CallServer1("btn1", ""); }
function onButton2() { CallServer2("btn2", ""); }
function onButton3() { CallServer3("btn3", ""); }
function ReceiveServerData(rtValue) { alert("" + rtValue); }
測試結果:
1. 第一次開啟網頁時,按任何一個按鍵皆可秀 alert
2.如果將 Page_Load 中加入判斷 IsCallBack Orelse IsPostBack ,則再按Button 皆出現錯誤! 表示 CallBack之後,照樣會執行 Page_Load!
3.查看IE畫面,確實每按一Button,畫面皆會跳動一次!
是不是我做錯步驟? 為何跟書上說的不一樣?
原來 ASP.NET 的 Server 控制項原本就會引發 __doPostBack
input name="Button3" value="Button3" onclick="onButton('3');__doPostBack('Button3','')" id="Button3"
只要在 Load_Page 中再加入
Button3.Atrributes.Add("onclick","return true;") 就可以避掉 __doPostBack
可是引發 RaiseCallbackEvent 時,照樣會執行到 Load_Page ,所 return true 只決解部分問題,但仍無法達成 AJAX 的目標!
沒有留言:
張貼留言