客户端通过Ajax调用后台方法返回DataSet,Ilist,ilist,T,对象

来源:互联网 发布:跟兄弟连学php 购买 编辑:程序博客网 时间:2024/06/05 05:26

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Xy.GamePt.VO;
using Xy.GamePt.BO;
using System.Collections;

public partial class Test : System.Web.UI.Page
{
    //添加一个 AjaxPro.HttpSessionStateRequirement 枚举的值到你的 AjaxPro.AjaxMethodAttribute中.

    //例如:
    //[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]   
    //现在你就可以像下面这样存取Session的值了: this.Session["0"].ToString().


    //另外一个问题:如何在AjaxMethod中使用Cookie?

    //答案是不能使用"this"的引用存取cookie ,你必须使用HttpContext.Current

    //例如:
    //HttpContext.Current.Request.Cookies[Name].Value.

    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(Test));
       
    }

    [AjaxPro.AjaxMethod()]  
    public string GetServerTime()
    {
        System.Threading.Thread.Sleep(2000);
        return DateTime.Now.ToString();
    }

    [AjaxPro.AjaxMethod()]
    public DataSet GetDataSet()
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("parentId", typeof(int));
        dt.Columns.Add("name", typeof(string));
   
        dt.Rows.Add(1, 0, "A-DGamename1");
        dt.Rows.Add(2, 1, "A-DGamename2");
        dt.Rows.Add(3, 1, "A-DGamename3");
        dt.Rows.Add(4, 1, "A-DGamename4");
        dt.Rows.Add(5, 0, "A-DGamename5");
        dt.Rows.Add(6, 5, "A-DGamename6");

        dt.Rows.Add(1, 0, "E-HGamename1");
        dt.Rows.Add(2, 1, "E-HGamename2");
        dt.Rows.Add(3, 1, "E-HGamename3");
        dt.Rows.Add(4, 1, "E-HGamename4");
        dt.Rows.Add(5, 0, "E-HGamename5");
        dt.Rows.Add(6, 5, "E-HGamename6");
       
        ds.Tables.Add(dt);
        return ds;
    }

    [AjaxPro.AjaxMethod()]
    public IList<Game> GetGameList()
    {
        return GameBO.GetGameList();
    }

    [AjaxPro.AjaxMethod()]
    public Game GetGame()
    {
        return GameBO.GetGame();
    }

    /// <summary>
    /// 返回Ilist
    /// </summary>
    /// <param name="parameter">脚本字符串参数</param>
    /// <param name="arr">脚本数组参数</param>
    /// <param name="xiaoxin">脚本对象参数</param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod()]
    public IList GetData(string parameter,string [] arr,object obj)
    {
        object xxxx = obj;
        Hashtable ht = xxxx as Hashtable;
        string sss = parameter;
        Array aaaa = arr;
        //Hashtable ht = arr as Hashtable;
        return TestBO.GetIlist();
    }
}

  前台

 

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

<!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>
</head>
<body>
    <form id="form1" runat="server">
    <select id="Select1">
        <option></option>
    </select>
      <div id="loadinfo" style="visibility:hidden;position:absolute;left:0px;top:0px;background-color:Red;color:White;">Loading</div>
  
        <input id="Button1" type="button" value="Get StrServerTime" onclick ="javascript:GetTime();void(0)" />
        <input id="Button2" type="button" value="DataSet" onclick ="javascript:Change();void(0)" />
          <input id="Button3" type="button" value="DataiList" onclick ="javascript:GetIListData();void(0)" />
           <input id="Button3" type="button" value="GetGameList" onclick ="javascript:GetGameList();void(0)" />
            <input id="Button3" type="button" value="GetGame" onclick ="javascript:GetGame();void(0)" />
        <div id="newDG"></div>

        <script type="text/javascript"  language="javascript">
            // loading效果
            AjaxPro.onLoading = function(b) {
                var a = document.getElementById("loadinfo");
                a.style.visibility = b ? "visible" : "hidden";
            }
            /* 客户端调用返回的字符串--------------------*/
            function GetTime() {
                // 调用服务端方法
                //调用方法:类名.方法名 (参数为指定一个回调函数)
                Test.GetServerTime(callback);
            }
            function callback(res)  //回调函数,显示结果
            {
                alert(res.value);
            }
            /*-----------------------------------------*/
            /* 客户端调用返回的DataSet--------------------*/

           function Change() {
               Test.GetDataSet(change_callback)
           }
           function change_callback(response) {
               var ds = response.value;
               var content = document.getElementById("newDG");
               var table = null;
               for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
                   if (i == 0) {
                       table = ds.Tables[0].Rows[i].name + "<br>";
                   }
                   else {
                       table += ds.Tables[0].Rows[i].name + "<br>";
                   }
               }
               content.innerHTML = table;
           }
           /*----------------------------------------------*/

           /* 客户端调用返回的IList--------------------*/
           function GetIListData() {
               var arr = Array("1", "2", "5", "64", "78");
              
               function User(name, age) {
                   this.name = name;
                   this.age = age;
                   this.canFly = false;
               }
               var obj = new User("234", "5345");

               Test.GetData("sdfsd", arr, obj, GetIListData_callback);
           }
           function GetIListData_callback(response) {
               var ilist = response.value;
               var content = document.getElementById("newDG");
               var table = null;
               for (var i = 0; i < ilist.length; i++) {
                   if (i == 0) {
                       table = ilist[i][1] + "|" + ilist[i][2] + "<br>";
                   }
                   else {
                       table += ilist[i][1] + "|" + ilist[i][2] + "<br>";
                   }
               }
               content.innerHTML = table;
           }
           /*----------------------------------------------*/

           /* 客户端调用返回的范型GameList--------------------*/

           function GetGameList() {
               Test.GetGameList(GetGameList_callback)
           }
           function GetGameList_callback(response) {
               var gameList = response.value;
               var content = document.getElementById("newDG");
             //  var table = game.StrGameName;
               var table = null;
               for (var i = 0; i < gameList.length; i++) {
                   if (i == 0) {
                       table = gameList[i].StrGameName + "<br>";
                   }
                   else {
                       table += gameList[i].StrGameName + "<br>";
                   }
               }
               content.innerHTML = table;
           }
           /*----------------------------------------------*/


           /* 客户端调用返回的实体Game--------------------*/
           function GetGame() {
               Test.GetGame(GetGame_callback)
           }
           function GetGame_callback(response) {
               var game = response.value;
               var content = document.getElementById("newDG");
               var table = game.StrGameName;

               content.innerHTML = table;
           }
           /*----------------------------------------------*/

      </script>
    </form>
</body>
</html>

 


Js调用Ajax方法,看似简单,自己用了用,没想到还是出现很多问题...记下几点:(注:工具是VS2005)

1、建站就不用说了,引用AjaxPro.dll

2、建一个cs类,用来封装ajax方法,代码如下:

public partial class AjaxMethod
    {
        private SqlConnection con = null;
        private SqlCommand com = null;

        private static string conString =
            System.Web.Configuration.WebConfigurationManager.ConnectionStrings["conString"].ConnectionString;

        [AjaxPro.AjaxMethod]    ///这个莫忘记
        public DataTable GetList()
        {
            DataSet ds = new DataSet();
            string sql = "select top 10 * from news";
            con = new SqlConnection(conString);
            SqlDataAdapter da = new SqlDataAdapter(sql,con);
            da.Fill(ds, "News");
            return ds.Tables[0];
        }
    }

3、接下来应该是可以调用了吧。然后在AjaxTest.aspx.cs页注册ajax才行。代码如下

     protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(JqueryDome.AjaxMethod));  ///这一步太重要了,可不忘记[注:此处类型是  命名空间.类名]
        }

4、一步一步挺顺利的。嘿嘿。接下来只管调用了吧:js代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxTest.aspx.cs" Inherits="JqueryDome.AjaxTest" %>

<!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 language="javascript" type="text/javascript" src="JS/jquery.js"></script>
    <script language="javascript" type="text/javascript">
   
        function Load()
        {
            var dt = JqueryDome.AjaxMethod.GetList().value;   ////这就是简单的JS调用AJAX方法。。。[命名空间.类名.方法名]
            if(dt != undefined)
            {
                var divNews = $("#divNews");
                var text = "<table border='1' cellpadding='0' cellspacing='0'>";
                for(var i=0;i<dt.Rows.length;i++)
                {
                     text += "<tr><td>"+dt.Rows[i].Id+"</td><td>"+dt.Rows[i].LeadTitle+"</td></tr>";
                }
                text +="</table>";
                $(divNews).html(text);
               
                $("tr").each(
                    function(i){
                        if(i%2==0)
                        {
                            $(this).addClass("color");
                        }
                    }
                );
            }
        }
       
        function Display()
        {
            var divNews = $("#divNews");
            divNews.toggle();
        }
    </script>
    <style>
        .color{
            background-color:Red;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">   ////这里也要注意的是.form必加runat="server"
    <div id="divNews">
    </div>
    <input id="btnSubmit" type="button" value="读取数据" onclick="Load()" />
    <input id="btnShow" type="button" value="显示/隐藏" onclick="Display()"/>
    </form>
</body>
</html>

5、简单的搭建好了,运行一下,结果是。。。结果是。。。未定义JqueryDome,。马上查原因...

打开html源代码看了,有

<script type="text/javascript" src="/ajaxpro/core.ashx"></script>
<script type="text/javascript" src="/ajaxpro/JqueryDome.AjaxMethod,JqueryDome.ashx"></script>

说明AjaxPro.dll引用正确.再找其它原因,才发现

居然我落了很重要的一步:

Web.config文件的配置...

 <system.web>   

  <httpHandlers>
   <add verb= "POST,GET"   path= "ajaxpro/*.ashx"   type= "AjaxPro.AjaxHandlerFactory,AjaxPro"/> ////这也很重要的,可以做为第二步
  </httpHandlers>

</system.web>

再运行,OK,一切正常,看来真的是很简单的.我在这里只是提几个注意点.供初次用的朋友们参考.让高手们见笑了....