JavaScript与Web Service组合实现无刷新交互(扩展)--查询数据库

本文详细介绍如何利用JavaScript与WebService实现网页的无刷新交互。包括搭建ASP.NET AJAX项目、创建数据库表、实体类定义、数据查询组件封装、WebService方法调用、页面数据显示以及客户端JavaScript方法的实现。

 

  • http://www.csharpwin.com/dotnetspace/1206.shtml
  • 摘要:JavaScript与Web Service组合实现无刷新交互这篇文章我已经写得比较清楚了.客户端的 JavaScript怎么与服务端的Web Service进行通信达到无刷新的AJAX功能.今天我将接着这里给大家写一篇扩展性文章.希望对大家有所帮助.
     JavaScript与Web Service组合实现无刷新交互这篇文章我已经写得比较清楚了.客户端的 JavaScript怎么与服务端的Web Service进行通信达到无刷新的AJAX功能.今天我将接着这里给大家写一篇扩展性文章.希望对大家有所帮助.

     少说话多做事,我们还是直奔主题吧!先看看今天的扩展性文章涉及到的东东.
     1.建立ASP.NET AJAX网站项目
     2.建立MSSQL数据库test,并建立UserInfo表
     3.建立与UserInfo表对应的实体类UserInfo,并定义好成员属性(get,set)
     4.建立UserInfoCompontent组件类,封装数据的查询功能
     5.建立Web Service调用UserInfoCompontent类的方法(因为Web Service才是与JavaScript交互的组件层)
     6.建立ASPX页面,掉用UserInfoCompontent把数据库的数据显示出来.
     7.在上一步建立的ASPX页面里定义与Web Service交互的JavaScript方法,处理发送请求和响应请求的相关操作.

一、二:第一、二步就不多说了吧,这两步要是就有问题的话我建议你可以转行干别的工作去了。下面是建立表的脚本:
if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[UserInfo] ' )  and   OBJECTPROPERTY
   (id,
   N ' IsUserTable ' )  =   1 )
    drop   table   [ dbo ] . [ UserInfo ]
    GO
    CREATE   TABLE   [ dbo ] . [ UserInfo ]  (
     [ userId ]   [ int ]   IDENTITY  ( 1 ,  1 )  NOT   NULL  ,
     [ userName ]   [ char ]  ( 10 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
     [ userSex ]   [ char ]  ( 10 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
     [ userAge ]   [ char ]  ( 10 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
     [ userTelephone ]   [ varchar ]  ( 11 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
     [ userAddress ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  
   )  ON   [ PRIMARY ]
    GO

三:建立UserInfo类并定义其成员与UserInfo表对应,设置其属性(get,set),UserInfo类的定义如下:
public   class  UserInfo
{
    public UserInfo(int id,string name,string sex,string age,string telephone,string address)
    {
        this.UserId = id;
        this.UserName = name;
        this.UserSex = sex;
        this.UserAge = age;
        this.UserTelephone = telephone;
        this.UserAddress = address;
    }


    private int _userId;
    public int UserId
    {
        get { return _userId; }
        set { _userId = value; }
    }


    private string _userName;
    public string UserName
    {
        get { return _userName; }
        set { _userName = value; }
    }


    private string _userSex;
    public string UserSex
    {
        get { return _userSex; }
        set { _userSex = value; }
    }


    private string _userAge;
    public string UserAge
    {
        get { return _userAge; }
        set { _userAge = value; }
    }


    private string _userTelephone;
    public string UserTelephone
    {
        get { return _userTelephone; }
        set { _userTelephone = value; }
    }


    private string _userAddress;
    public string UserAddress
    {
        get { return _userAddress; }
        set { _userAddress = value; }
    }

}

四:建立UserInfoCompontent,封装数据的查询功能,详细定义如下所示:

public   class  UserInfoComponent
{
    private string _strCon;
    public string StrCon
    {
        get { return _strCon; }
        set { _strCon = value; }
    }


    public UserInfoComponent()
    {
        this.StrCon = ConfigurationManager.AppSettings["ConnectionString"];
    }


    public  DataSet QueryAll()
    {
        string commandText = "Select * from UserInfo";
        return QueryUserInfo(commandText);
    }


    public  UserInfo Query(int userId)
    {
        string commandText = "Select * from UserInfo where userId=" + userId;
        DataTable dt = QueryUserInfo(commandText).Tables[0];
        UserInfo user = new UserInfo(int.Parse(dt.Rows[0][0].ToString()),
            dt.Rows[0][1].ToString(),
            dt.Rows[0][2].ToString(),
            dt.Rows[0][3].ToString(),
            dt.Rows[0][4].ToString(),
            dt.Rows[0][5].ToString());
        return user;
    }


    public  DataSet QueryUserInfo(string commandText)
    {
        using (SqlConnection conn = new SqlConnection(StrCon))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(commandText, conn))
            {
                using (DataSet ds = new DataSet())
                {
                    sda.Fill(ds);
                    return ds;
                }

            }

        }

    }

}

五:建立Web Service调用UserInfoCompontent类的方法(因为Web Service才是与JavaScript交互的组件层)

[ScriptService]
public   class  UserInfoWebService : System.Web.Services.WebService  {

    UserInfoComponent user = new UserInfoComponent();

    public UserInfoWebService () {

        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }


    [WebMethod]
    public UserInfo GetUserInfo(int id)
    {
        return user.Query(id);
    }

}

六:建立ASPX页面Default.aspx并在页面上拽一个GridView控件,调用UserInfoCompontent把数据库的数据显示出来.

UserInfoComponent user  =   new  UserInfoComponent();
     protected   void  Page_Load( object  sender, EventArgs e)
     {
        if (!IsPostBack)
        {
            DataBindGridView();
        }

    }


     private   void  DataBindGridView()
     {
        this.GridView1.DataSource = user.QueryAll();
        this.GridView1.DataBind();
    }

七:在上一步建立的ASPX页面里定义与Web Service交互的JavaScript方法,处理发送请求和响应请求的相关操作.这一步就是关键了。实现了在客户断通过JavaScript于Web Servie通信,查询数据库并返回查询结果到页面上。
    同上一篇文章一样,需要在页面上放置一个ScriptManager控件,应该他是ASP.NET AJAX的核心。每一个ASP.NET AJAX程序的页面上都必须要有一个ScriptManager控件。并指向先前我门定义好的Web Service。如下:
< asp:ScriptManager ID = " ScriptManager1 "  runat = " server " >
         < Services >
           < asp:ServiceReference Path = " UserInfoWebService.asmx "  InlineScript = " true "   />
         </ Services >
     </ asp:ScriptManager >

下面我们来下实现通信和处理请求及处理响应的客户端JavaScript方法;
在定义方法前我门先在页面上写一个文本框和一个按扭。文本框提供数据输入,按扭执行向服务端方法请求查询数据库操作。html代码如下:

请输入ID: < asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >
< input  id ="Button1"  type ="button"  value ="查询"  onclick ="showUserInfo()"   />

现在该是写JavaScript方法的时候了。

< script language = " javascript "  type = " text/javascript " >
function  showUserInfo()
{
    var id=document.getElementById("TextBox1").value;
    UserInfoWebService.GetUserInfo(id,onGetUserInfoSuccess);
}

            
function  onGetUserInfoSuccess(user)
{
    document.getElementById("id").innerText=user.UserId;
    document.getElementById("name").innerText=user.UserName;
    document.getElementById("sex").innerText=user.UserSex;
    document.getElementById("age").innerText=user.UserAge;
    document.getElementById("tele").innerText=user.UserTelephone;
    document.getElementById("address").innerText=user.UserAddress;
}

< / script>

这里也许会有人会问到,你上面的onGetUserInfoSuccess()方法里所用到的id,name,sex....这些是那里来的呢?先好象没定义啊。是啊,我先前没定义他门呢,他是处理所查询到的数据库的数据的显示操作的,这到最后来,说来就来吧,在html里下一个表格或是从工具箱里拽一个表格控件出来。适当的调整下宽度,如下:

< table  style ="width: 540px"  border ="1"  bordercolor ="#663333"  cellpadding ="1"  cellspacing ="0" >
< tr >
       < td  style ="text-align: center; width: 38px;" > 编号 </ td >
       < td  style ="text-align: center; width: 38px;" > 姓名 </ td >
       < td  style ="text-align: center; width: 45px;" > 性别 </ td >
       < td  style ="text-align: center; width: 35px;" > 年龄 </ td >
       < td  style ="text-align: center; width: 82px;" > 电话 </ td >
       < td  style ="text-align: center; width: 79px;" > 地址 </ td >
   </ tr >
   < tr >
       < td  id ="id" ></ td >
       < td  id ="name" ></ td >
       < td  id ="sex" ></ td >
       < td  id ="age" ></ td >
       < td  id ="tele" ></ td >
       < td  id ="address" ></ td >
    </ tr >
</ table >

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值