使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别.
新建ASP.NET MVC应用程序,如果是Microsoft ASP.NET MVC CodePlex Preview 5新建MVC应用程序后将会自动引入Microsoft Ajax Library,如下截图:
我们转到AjaxPage.aspx的代码文件就会发现,页面类由原来继承Page类变为了ViewPage,如下:
2 {
3 public partial class AjaxPage : ViewPage
4 {
5 }
6 }
2 {
3 public class AjaxController : Controller
4 {
5 public ActionResult AjaxPage()
6 {
7 return View();
8 }
9 }
10 }
OK,上面的准备工作完成了,下面我们就来看看在客户端怎么通过ScriptManager来访问WebSerivice.
2 {
3 [WebService(Namespace = "[url]http://tempuri.org/[/url]")]
4 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
5 [ToolboxItem(false)]
6 [System.Web.Script.Services.ScriptService]
7 public class AjaxService : System.Web.Services.WebService
8 {
9
10 [WebMethod]
11 public Users GetUser()
12 {
13 return new Users
14 {
15 ID = 1,
16 Name = "zhangsan",
17 Password = "123456"
18 };
19 }
20
21 [WebMethod]
22 public Users SetUser(int id,string name,string pwd)
23 {
24 return new Users
25 {
26 ID = id,
27 Name = name,
28 Password = pwd
29 };
30 }
31 }
32 }
2 {
3 public class Users
4 {
5 public int ID { get; set;}
6 public string Name { get; set; }
7 public string Password { get; set; }
8 }
9 }
2 <Services>
3 <asp:ServiceReference Path="~/Services/AjaxService.asmx" />
4 </Services>
5 </asp:ScriptManager>
2 function btnRequest_onclick()
3 {
4 MvcAndAjax.Services.AjaxService.GetUser(success);
5 }
6
7 function btnRequestClick()
8 {
9 var jsonUser = {
10 "ID":$get("txtID").value,
11 "Name":$get("txtName").value,
12 "Passwrod":$get("txtPassword").value
13 };
14 MvcAndAjax.Services.AjaxService.SetUser(jsonUser,success);
15 }
16
17 function success(result)
18 {
19 var user=String.format("ID:{0}<br/>Name:{1}<br/>Password:{1}",result.ID,result.Name,result.Password);
20 $get("result").innerHTML=user;
21 }
22 </script>
3. 通过Microsoft Ajax Library在客户端异步访问WebService
使用Library很简单,之前使用的是ScriptManager,要使用Library其实也就是用它来代替ScriptManager去完成引入WebService到客户端以生成客户端代理.OK,下面我们将页面上的ScriptManager去掉,在页面的<head>下引入Microsoft Ajax Library.并通过Microsoft Ajax Library来生成客户端代理.代码如下:
2 <script type="text/javascript" src="/Services/AjaxService.asmx/js"></script>
我们只需要如上引入Microsoft Ajax Library,然后生成WebService的客户端代理就可以了,现在运行程序便如上面使用ScriptManager引入WebService生成客户端代理一样.