一佳一

记录像1+1一样简洁的代码

导航

ASP.NET AJAX + JSON 实现对象调用

Posted on 2010-01-13 16:52  一佳一  阅读(450)  评论(0编辑  收藏  举报

最近开始学习ASP.NET AJAX 搞了两天学了点皮毛,贴点代码 日后方便自己查看

客户端:

 

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="ASP.NETA_JAX.aspx.cs" Inherits="_Default" %>

<!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></title>
    <script type="text/jscript">
        function CallServer() {  

            //JSON发送对象
            ServerSum("{name:'linyijia',age:'21'}");
        }
        function GetRegister(rg, contex) {
            document.getElementById("TxtRegister").value=rg;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <br />
        用户名:<input id="TxtNum1" type="text" />
        <br />
        服务器:<input id="TxtRegister" type="text" /><br />
       <button id="SumBtn" type="button" onclick="CallServer()">登录</button>
   
    </div>
    </form>
</body>
</html>

 

 

服务器:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;

public partial class _Default : System.Web.UI.Page ,ICallbackEventHandler
{
    Users u = null;
    protected void Page_Load(object sender, EventArgs e)
    {

       //回调GetRegister方法
        string CallBackFun = Page.ClientScript.GetCallbackEventReference(this,"arg","GetRegister","context");

       //创建ServerSum方法,在客户端调用的时候就,会回调GetRegister方法,把参数传给RaiseCallbackEvent(string eventArgument ),最后通过
      //GetCallbackResult()方法把返回值传给客户端

        string RegisterFun = string.Format("function ServerSum(arg,context){{{0};}}",CallBackFun);
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"ServerSum",RegisterFun,true);
       
    }
    string mssage = string.Empty;
    #region ICallbackEventHandler 成员


    public string GetCallbackResult()
    {
        return "服务器:你好,你的用户名为:" + u.Name + "你的年龄为" + u.Age;
    }

    public void RaiseCallbackEvent(string eventArgument)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        u  =js.Deserialize<Users>(eventArgument);
       
    }

    #endregion
}

 

 Users类

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///User 的摘要说明
/// </summary>
public class Users
{
    string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    string age;

    public string Age
    {
        get { return age; }
        set { age = value; }
    }
}

 

原理:

使用JSON向服务器发送一个对象,服务器通过实现 ICallbackEventHandler接口后,重写GetCallbackResult和RaiseCallbackEvent方法,在回调的时候,在RaiseCallbackEvent方法

中反序列化JSON,并在GetCallbackResult把结果返回给客户端.具体的我以后有空再补充,欢迎大家讨论!