頁面方法只是頁面代碼類中所暴露的帶有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=
ScriptManager
EnablePageMethods=
true
/>
為能執行頁面方法
必須在nfig文件中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(
Label
)
innerHTML = displayString;} 通過頁面方法
我們能夠使用HttpContext的Current屬性訪問視圖狀態
ASP
NET Cache
User和其他內部對象
HTTP上下文針對的不是頁面的生命周期
它在接到請求後就存在
並一直伴隨著請求而存在
From:http://tw.wingwit.com/Article/program/ASP/201311/21792.html