Ajax无刷新实现省市联动,并在回发后保留省市下拉框状态

功能说明:1、实现省市无刷新联动,并在回发后保留省市下拉框状态

              2、使用jquery+AjaxPro实现,也可用xmlhttprequest+ashx实现,原理一样

前台代码:

 

<! 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 src = " http://www.cnblogs.com/http://www.cnblogs.com/Content/Script/jquery-1.4.1-vsdoc.js "  type = " text/javascript " ></ script >
    
< script type = " text/javascript " >
        $(function () {
            
// 【省份】-【城市】关系
            $( " #<%=ddlProvince.ClientID %> " ).change(function () {
                var res 
=  Views_JsAndJquery_Ajax_Common_TwoGrade.BindCity( this .value).value;
                $(
" #<%=ddlCity.ClientID %> " ).empty().html(res);
                $(
" #<%=hdCity.ClientID %> " ).val(res);
                $(
" #<%=hdCitySelectedValue.ClientID %> " ).val( '' );
            });

            $(
" #<%=ddlCity.ClientID %> " ).change(function () {   // 保存城市下来选择值
                $( " #<%=hdCitySelectedValue.ClientID %> " ).val($( " #<%=ddlCity.ClientID %> " ).val());
            });

            
// 页面加载时,恢复之前【城市】下拉框状态
             if  ($( " #<%=hdCity.ClientID %> " ).val()  !=   "" ) {
                
if  ($( " #<%=ddlProvince.ClientID %> " ).val()  !=   '' ) {
                    $(
" #<%=ddlCity.ClientID %> " ).empty().html($( " #<%=hdCity.ClientID %> " ).val());   // 重新加载【城市】数据
                    $( " #<%=ddlCity.ClientID %> " ).val($( " #<%=hdCitySelectedValue.ClientID %> " ).val());  // 恢复之前选择的值
                }
                
else  {   // 如果省份下拉框选择第一项则清空城市下拉框对应的隐藏值
                    $( " #<%=hdCity.ClientID %> " ).val( '' );
                    $(
" #<%=hdCitySelectedValue.ClientID %> " ).val( '' );
                }
            }
        });
    
</ script >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
<%-- 存放省份所对应的城市信息 --%>
    
< asp:HiddenField ID = " hdCity "  runat = " server "   />
    
<%-- 存放城市下拉框选择的值  --%>
    
< asp:HiddenField ID = " hdCitySelectedValue "  runat = " server "   />
    
< div >
        
< asp:DropDownList ID = " ddlProvince "  runat = " server " >
        
</ asp:DropDownList >
        
< asp:DropDownList ID = " ddlCity "  runat = " server " >
        
</ asp:DropDownList >
        
< asp:Button ID = " Button1 "  runat = " server "  Text = " Button "  OnClick = " Button1_Click "   />
    
</ div >
    
</ form >
</ body >
</ html >

 

后台代码:

 

public   partial   class  Views_JsAndJquery_Ajax_Common_TwoGrade : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(
typeof (Views_JsAndJquery_Ajax_Common_TwoGrade));   // 每次回发都得重新注册
         if  ( ! IsPostBack)
        {
            BindProvince();
            
this .ddlCity.Items.Add( " 请选择 " );
        }
    }
    
private   void  BindProvince()   // 绑定省份
    {
        
this .ddlProvince.Items.Add( new  ListItem( " 请选择 " string .Empty));
        
this .ddlProvince.Items.Add( new  ListItem( " 湖北 " " 01 " ));
        
this .ddlProvince.Items.Add( new  ListItem( " 湖南 " " 02 " ));
    }
    
///   <summary>
    
///  绑定城市
    
///   </summary>         
    
///   <returns></returns>
    [AjaxPro.AjaxMethod]
    
public   string  BindCity( string  parProvinID)
    {
        StringBuilder st 
=   new  StringBuilder();

        st.Append(
" <option value=\" "   +   string .Empty  +   " \"> "   +   " 请选择 "   +   " </option>\n " );

        
if  (parProvinID  !=   string .Empty)
        {
            
if  (parProvinID  ==   " 01 " )
            {
                st.Append(
" <option value=\"01\">武汉</option>\n " );
                st.Append(
" <option value=\"02\">孝感</option>\n " );
            }
            
else   if  (parProvinID  ==   " 02 " )
            {
                st.Append(
" <option value=\"01\">长沙</option>\n " );
                st.Append(
" <option value=\"02\">岳阳</option>\n " );
            }
        }
        
return  st.ToString();
    }
    
protected   void  Button1_Click( object  sender, EventArgs e)   // 获取下拉框值
    {
        
string  str  =   this .ddlProvince.SelectedValue;     // 省份下拉框
         string  str2  =  Request[ this .ddlCity.UniqueID];   // 城市下拉框的seelctedvalue
         string  str3  =   this .hdCitySelectedValue.Value;   // 城市下拉框的seelctedvalue
    }
}

 

会出现的异常信息(下面解决方法会影响安全,并不是最好的方法)

一、从客户端中检测到有潜在危险的 Request.Form 
 解决方法: <%@ Page  ValidateRequest="false"

二、回发或回调参数无效。在配置中使用 <pages  enableEventValidation="true"/>

解决方法: <%@ Page  EnableEventValidation="false"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值