JQuery+WebService实现DropDownlist无刷新三级联动

本文的一些内容是参考互联网上的,所以有部分是相似的,请原作者谅解(时间久远,找不到出处了).

 

一,数据源为SQL Server

采用的是国内的省市县三级的数据库.具体的数据库请看脚本.
http://files.cnblogs.com/conan304/CitySQL.zip

 

二,前台代码端

    地址: &nbsp;   &nbsp; < asp:DropDownList  ID ="ddlProvince"  runat ="server" ></ asp:DropDownList >
   
&nbsp;   &nbsp;   < asp:DropDownList  ID ="ddlCity"  runat ="server" ></ asp:DropDownList > 

   &nbsp;&nbsp;<asp:DropDownList ID="ddlArea" runat="server"></asp:DropDownList>

   

三,Jquery代码

< script type = " text/javascript "  language = " javascript "  src = " Script/jquery-1.4.1.min.js " >< / script>
< script type = " text/javascript "  language = " javascript " >
    $(
function () {         

        
var  $dp1  =  $( " #ddlProvince " );
        
var  $dp2  =  $( " #ddlCity " );
        
var  $dp3  =  $( " #ddlArea " );
        $dp1.focus();

        loadAreas(
" 0 " " 0 " );

        $dp2[
0 ].disabled  =   true ;
        $dp3[
0 ].disabled  =   true ;

        $dp1.bind(
" change keyup " function () {
            
if  ($( this ).val()  !=   "" ) {
                
var  strPid  =  $dp1.attr( " value " );  // 获取城市
                loadAreas(strPid,  " 1 " );
                $dp2[
0 ].disabled  =   false ;
            } 
else  {
                $dp2[
0 ].disabled  =   true ;
                $(
" #ddlCity " ).html( "" );
                $(
" #ddlCity " ).append( " <option value='' selected='selected'>请选择城市名称</option> " );

                $(
" #ddlArea " ).html( "" );
                $(
" #ddlArea " ).append( " <option value='' selected='selected'>请选择地区名称</option> " );
            }
            $dp3[
0 ].disabled  =   true ;
        });
        $dp2.bind(
" change keyup " function () {
            
var  strCId  =  $dp2.attr( " value " );  // 获取城市
             if  ($( this ).val()  !=   "" ) {
                loadAreas(strCId, 
" 2 " );
                $dp3[
0 ].disabled  =   false ;
            } 
else  {
                $dp3[
0 ].disabled  =   true ;
                $(
" #ddlArea " ).html( "" );
                $(
" #ddlArea " ).append( " <option value='' selected='selected'>请选择地区名称</option> " );
            }
        });
    });

    
function  loadAreas(selectedItem, level) {
        $.ajax({
            type: 
" GET " ,
            contentType: 
" application/json; charset=utf-8 " ,
            url: 
" Ajax/CityGet.asmx/CityInfoGet " ,
            data: encodeURI(
" parentID=' "   +  selectedItem  +   " ' " ),
            dataType: 
" json " ,
            success: 
function (result) {
                
switch  (level) {
                    
case   " 0 " :
                        $(
" #ddlProvince " ).html( "" );
                        $(
" #ddlProvince " ).append( " <option value='' selected='selected'>请选择省份</option> " );

                        $(
" #ddlCity " ).html( "" );
                        $(
" #ddlCity " ).append( " <option value='' selected='selected'>请选择城市名称</option> " );

                        $(
" #ddlArea " ).html( "" );
                        $(
" #ddlArea " ).append( " <option value='' selected='selected'>请选择地区名称</option> " );

                        
for  ( var  i  =   0 ; i  <  result[ " d " ].length; i ++ ) {
                            $(
" #ddlProvince " ).append($( " <option></option> " ).val(result[ " d " ][i].CodeID).html(result[ " d " ][i].CityName));
                        };
                        
break ;
                    
case   " 1 " :
                        $(
" #ddlCity " ).html( "" );
                        $(
" #ddlCity " ).append( " <option value='' selected='selected'>请选择城市名称</option> " );

                        $(
" #ddlArea " ).html( "" );
                        $(
" #ddlArea " ).append( " <option value='' selected='selected'>请选择地区名称</option> " );

                        
for  ( var  i  =   0 ; i  <  result[ " d " ].length; i ++ ) {
                            $(
" #ddlCity " ).append($( " <option></option> " ).val(result[ " d " ][i].CodeID).html(result[ " d " ][i].CityName));
                        };
                        
break ;
                    
case   " 2 " :
                        $(
" #ddlArea " ).html( "" );
                        $(
" #ddlArea " ).append( " <option value='' selected='selected'>请选择地区名称</option> " );
                        
for  ( var  i  =   0 ; i  <  result[ " d " ].length; i ++ ) {
                            $(
" #ddlArea " ).append($( " <option></option> " ).val(result[ " d " ][i].CodeID).html(result[ " d " ][i].CityName));
                        };
                        
break ;

                    
default :
                        
break ;
                }

            },
            error: 
function (x, e) {
                alert(x.responseText);
            }
        });
    }

</script> 


 

四,c#代码 

1,WebService,位于AJAX文件夹下:

using  System.Collections.Generic;
using  System.Web.Script.Services;
using  System.Web.Services;

///   <summary>
/// CityGet 的摘要说明
///   </summary>
[WebService(Namespace  =   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
 [System.Web.Script.Services.ScriptService]
public   class  CityGet : System.Web.Services.WebService
{

    
public  CityGet()
    {

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


    
///   <summary>
    
///  获取城市信息,用Json返回
    
///   </summary>
    
///   <param name="parentID"></param>
    
///   <returns></returns>
    [WebMethod]
    [ScriptMethod(ResponseFormat 
=  ResponseFormat.Json, UseHttpGet  =   true )]
    
public  IList < Model.CityInfo >  CityInfoGet( string  parentID)
    {
        IList
< Model.CityInfo >  list  =  BLL.City.CityInfo.CityListFindByParentID( int .Parse(parentID));
        
return  list;
    }


 

 多层架构调用,省略了中间的DALFactory,IDal等.这里仅仅写出访问数据库的代码:

using  System.Collections.Generic;
using  System.Data;
using  System.Data.SqlClient;
using  System.Text;

namespace  SQLServer.City
{
    
public   class  CityInfo : IDAL.City.ICityInfo
    {
        
///   <summary>
        
///  根据父级ID获取城市信息
        
///   </summary>
        
///   <param name="CodeID"></param>
        
///   <returns></returns>
         public  IList < Model.CityInfo >  CityListFindByParentID( int  CodeID)
        {
            IList
< Model.CityInfo >  listCity  =   new  List < Model.CityInfo > ();

            StringBuilder sql 
=   new  StringBuilder();
            sql.Append(
"     SELECT [codeid],[parentid],[cityName] " );
            sql.Append(
"     FROM [tbl_province] " );
            sql.Append(
"     WHERE parentid=@parentid " );            
            sql.Append(
"     ORDER BY codeid " );

            SqlParameter param 
=   new  SqlParameter( " @parentid " , SqlDbType.Int);
            param.Value 
=  CodeID;


            
using  (SqlDataReader dr  =  SQLHelper.ExecuteReader(CommandType.Text, sql.ToString(), param))
            {
                
while  (dr.Read())
                {
                    Model.CityInfo city 
=   new  Model.CityInfo
                    {
                        CodeID 
=  dr.GetInt32( 0 ),
                        ParentID 
=  dr.GetInt32( 1 ),
                        CityName 
=  dr.GetString( 2 ).Trim()
                    };
                    listCity.Add(city);
                }
            }

            
return  listCity;
        }
    }

 

Model:

namespace  Model
{
    
///   <summary>
    
///  城市信息
    
///   </summary>
     public   class  CityInfo
    {
        
///   <summary>
        
///  城市的ID
        
///   </summary>
         public   int  CodeID {  get set ; }

        
///   <summary>
        
///  城市的父级ID
        
///   </summary>
         public   int  ParentID {  get set ; }

        
///   <summary>
        
///  城市的名称
        
///   </summary>
         public   string  CityName {  get set ; }
    }

}  


 

转载于:https://www.cnblogs.com/conan304/archive/2011/07/31/2122541.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值