關鍵字:PageMethods ScriptLibrary ASP.NET AJAX 1.0 RC
Microsoft ASP.NET AJAX可以很方便的讓我們在客戶端使用腳本調用ASP.NET Web Services(.asmx),要啓用這一特性,像前面提到的一樣,必須要配置Web.Config,可以參照Microsoft ASP.NET AJAX安裝目錄下的Web.Config,如果是通過ASP.NET AJAX-enabled Web site模版建立的站點,則不需要再進行設置了。配置節點如下:
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory"/>
</httpHandlers>
<system.web>
以上配置節爲Web應用程序添加了一個HTTP handler:ScriptHandlerFactory,它的作用是處理腳本調用Web Service的請求,如果是非腳步對.asmx的調用請求,則轉給默認的處理器。
使用腳本調用服務器方法有兩種方式,一種是調用常規的ASP.NET Web Service,另一種直接調用頁面代碼頁上的方法。兩種方式都非常簡單,對於前者,我們只需在現有的Web Service上增加一個屬性:
而對於頁面上的方法,只需給現有方法增加如下特性,並改爲靜態方法:
下面我們分別對其進行詳細討論。
Web Service方式
首先爲項目添加一個文件夾WebServices,來存放所有要用到的Web Servcie頁面,然後在Web Services文件夾下面添加一個 Web Service命名爲SimpleWebService.asmx,在後臺增加一個SayHello方法,並指定WebMethod特性。完整的代碼如下:
SimpleWebService.cs
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
[System.Web.Script.Services.ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SimpleWebService : System.Web.Services.WebService
{
public SimpleWebService()
{
}
[WebMethod]
public string SayHello(string s)
{
return "Hello " + s;
}
}
然後添加一個Web Form,這裏取名ServiceMethodDemo.aspx,添加一些JavaScript函數調用Web Service,完整代碼如下:
CodeFile="ServiceMethodDemo.aspx.cs" Inherits="Demo6_ServiceMethodDemo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Web Service腳本調用示例</title>
<script type="text/javascript">
// 調用Web Service的JavaScript函數
function EchoUserInput()
{
var echoElem = document.getElementById("EnteredValue");
SimpleWebService.SayHello(echoElem.value,
OnSucceeded);
}
// 調用成功後的回調函數
function OnSucceeded(result)
{
var RsltElem = document.getElementById("Results");
RsltElem.innerHTML = result;
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<asp:ScriptManager runat="server" ID="scriptManager">
<Services>
<asp:ServiceReference path="~/WebServices/SimpleWebService.asmx" />
</Services>
</asp:ScriptManager>
<div>
<h2>Web Service腳本調用示例</h2>
<p>請在下面文本框內輸入名字,然後點擊按鈕.</p>
<input id="EnteredValue" type="text" />
<input id="EchoButton" type="button"
value="Echo" onclick="EchoUserInput()" />
</div>
</form>
<hr/><span id="Results"></span>
</body>
</html>
最後在瀏覽器中查看,可以看到我們期望的效果,在頁面的文本框中輸入你的名字,點擊按鈕,頁面顯示出
Hello xxx!
Page Method 方式
如果不想獨立創建Web Service,而只是希望能夠調用頁面上的一些方法,那麼可以採用Page Method的的方法。同樣的我們添加一個頁面PageMethodDemo.aspx,增加一些JavaScript和一個後臺方法,注意這個方法必須是靜態方法,代碼如下:
function PageMethodCall()
{
var testString = "PageMethodCall";
PageMethods.Test($get('txtName').value, OnSucceeded);
}
// 頁面方法調用完成的回調函數.
function OnSucceeded(result)
{
// 顯示調用結果
var RsltElem = document.getElementById("Results");
RsltElem.innerHTML = result;
}
</script>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<h2>Page Method</h2>
<input ID="txtName" type="text" />
<button id="Button1"
onclick="PageMethodCall();">調用Page Method</button>
</div>
<hr/>
<div>
<span id="Results"></span>
</div>
</form>
代碼頁PageMethodDemo.aspx.cs
public static string Test(string name)
{
return "Hello " + name + "!";
}