Microsoft ASP.NET AJAX 使用客戶端調用服務器端的方法

從Atlas到Microsoft ASP.NET AJAX 1.0 RC發生了很大的變化,鑑於目前網上Microsoft ASP.NET AJAX 1.0 RC中文資料的匱乏,本文針對Atlas中PageMethods的變化編寫了客戶端調用服務器端方法的新的教程。以前處於Microsoft.Web.Preview組件中的Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js現在已經更改,需要使用新的方式實現,詳細請參考本文。

關鍵字: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模版建立的站點,則不需要再進行設置了。配置節點如下:
<system.web>
  
<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上增加一個屬性:

[System.Web.Script.Services.ScriptService]

而對於頁面上的方法,只需給現有方法增加如下特性,並改爲靜態方法:

[System.Web.Services.WebMethod]

 

下面我們分別對其進行詳細討論。

Web Service方式

首先爲項目添加一個文件夾WebServices,來存放所有要用到的Web Servcie頁面,然後在Web Services文件夾下面添加一個 Web Service命名爲SimpleWebService.asmx,在後臺增加一個SayHello方法,並指定WebMethod特性。完整的代碼如下:
SimpleWebService.cs

using System;
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,完整代碼如下:

<%@ Page Language="C#" AutoEventWireup="true"
 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和一個後臺方法,注意這個方法必須是靜態方法,代碼如下:

<script type="text/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

[System.Web.Services.WebMethod]
public static string Test(string name)
{
    
return "Hello " + name + "!";
}


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章