Asp.Net2.0的客戶端回調是一種很讓人激動的方法,他能夠讓我們控制要提 交什麼數據給服務器而不用提交整個頁面,同時服務器也只返回你所需要的數據 而不要發回整個頁面。
首先我們要說一個很重要的方法:GetCallbackEventRefernce.我把我的理解 寫出來,可能是錯誤的,懇請指出,非常感謝!
GetCallbackEventReference首先實現讓客戶端腳本有能力傳遞參數給服務器端的RaiseCallbackEvent方法,然後返回RaiseCallBackEvent方法的值給你在 GetCallbackEventRefernce方法中注冊的一個參數(其實也是一個你要在客戶端 寫的腳本)。調用GetCallbackEventRefernce你必須從客戶端腳本中傳遞給他兩 個參數,一個是要傳遞給RaiseCallbackEvent事件的值,一個是context.
他的參數意義如下:
第一個:實現了ICallbackEventHandler借口的頁面或者服務器控件,寫this 代表但前頁面。
第二個:代表你從要從客戶端傳遞給服務器RaiseCallbackEvent方法的值
第三個:你要在客戶端寫的一個js函數,同時,服務器也會把計算得到的數 據傳遞給這個函數做為這個函數的參數。
第四個:context具體什麼意思我也不太清楚GetCallbackEventRefernce發送 到了客戶、端的代碼是這樣的:
WebForm_DoCallback ('__Page',arg,ReceiveServerData,context,null,false)
那麼我們要怎麼樣做才能夠從客戶端調用他呢?看到了三中方法:
第一種:在後台寫個public string,在Page_Load中給他賦值為: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");注意在這裡是Page.ClientScrip,因為他會返回 個ClientScriptManager,ClientScriptManager管理所有的客戶端腳本。然後在 前台某個按鈕的onclick事件裡<%=那個public後台字符串%>.做個小實驗 代碼如下:
前台ServerTime.aspx:為了方便去掉好多沒用的html
<%@ page language="C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<head>
<title>Server Time</title>
<script language="javascript">
function GetServerTime()
{
var message = '';
var context = '';
<%=sCallBackFunctionInvocation%>
}
function ShowServerTime(timeMessage, context) {
alert('現在服務器上的時間是:\n' + timeMessage);
}
</script>
</head>
<body>
<form id="MainForm" runat="server">
<input type="button" value="得到服務器端時間" onclick="GetServerTime();" />
</form>
</body>
</html>