轉帖|其它|編輯:郝浩|2011-06-03 15:59:18.000|閱讀 416 次
概述:頁面方法只是頁面代碼類中所暴露的帶有WebMethod特性的公共靜態方法。頁面方法和支持AJAX的Web服務的運行時引擎幾乎相同。使用頁面方法,我們不用創建和發布服務。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
頁面方法只是頁面代碼類中所暴露的帶有WebMethod特性的公共靜態方法。頁面方法和支持AJAX的Web服務的運行時引擎幾乎相同。使用頁面方法,我們不用創建和發布服務。
頁面方法的定義
在頁面代碼類中定義公共靜態方法,并為其添加WebMethod特性,便會將ASP.NET AJAX頁面轉化為Web服務:
public class TimeServicePage : System.Web.UI.Page{
[WebMethod]
public static DateTime GetTime()
{
return DateTime.Now;
}} 我們可以在頁面方法中使用任何數據類型,所有類型在調用期間都會被轉換為JSON格式。
我們也可以在aspx源文件中以內聯方式定義Web方法:
<script type="text/C#" runat="server">
[WebMethod]
public static DateTime GetTime()
{
return DateTime.Now;
}</script> 注意,頁面方法針對的是給定的ASP.NET頁面,只有宿主頁面才能調用自身的Web方法,不支持跨頁面調用。
頁面方法的啟用
如果ASP.NET AJAX頁面的代碼類中包含WebMethod修飾的靜態方法,運行時引擎會生成與Web服務一樣的JavaScript代理類。我們可使用該類的實現來調用服務器方法。該類的名稱會被硬編碼為PageMethods.
注意,頁面方法在默認情況下是被禁用的。為啟用它,我們必須將腳本管理器的EnablePageMethods屬性設為true.
<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />
為能執行頁面方法,必須在web.config文件中HTTP模塊ScriptModule:
<httpModules>
<add name="ScriptModule"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions" /></httpModules> 該模塊的工作過程是,監聽會話狀態加載后的應用程序事件,執行頁面方法,然后為調用者生成響應。由于獲取會話狀態是在啟動頁面生命周期之前執行的,所以,這種方法調用不會建立頁面的生命周期,也不會進行子控件的初始化和處理。
頁面方法的使用
頁面方法的集合會以固定的類名暴露給JavaScript代碼--PageMethods.該類會列出所有靜態方法,且該類不需自行實例化。
PageMethods代理類
與Web服務的代理類不同,PageMethods代理類總會以內聯腳本的形式嵌在引用它的頁面主體中。否則,對于不同的頁面,該類的名稱應各不相同。該類的結構幾乎與AJAX Web服務代理類的結構相同。
頁面方法的執行
以上述代碼中的GetTime方法為例:
function getTime(){
PageMethods.GetTime(methodCompleted);
}
function methodCompleted(results, context, methodName){
var displayString = results.format("ddd, dd MMMM yyyy");
$get("Label1")。innerHTML = displayString;} 通過頁面方法,我們能夠使用HttpContext的Current屬性訪問視圖狀態、ASP.NET Cache、User和其他內部對象。HTTP上下文針對的不是頁面的生命周期,它在接到請求后就存在,并一直伴隨著請求而存在。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載