• 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"

     

  • 相关阅读:
    能成大事儿的人,都具备这5个特质
    元气森林唐彬森:苦了10年我发现,发大财首先要会选
    反者道之动,亿万富翁查理芒格受用一生的逆向思维
    解决不了bug先放着,这里有40条提升编程技能小妙招
    理解maven命令package、install、deploy的联系与区别
    每日一则
    《穷查理年鉴》贪嗔痴 & 懒贪装(关于败坏)
    C++构造函数
    C++类的定义和封装
    C++访问控制限定符
  • 原文地址:https://www.cnblogs.com/gossip/p/1980179.html
Copyright © 2020-2023  润新知