• 用AjaxPro实现二级联动


    在实际asp.net项目中经常会遇到无刷新二级或者N级(N>=2)联动情况,其实N级联动和二级联动的原理都是一样的,实现这种办法有很多,一种是纯脚本实现(动态生成Array数组),一种 是采用微软的Ajax.net中的UpdatePanel来实现,今天给大家来展示如何采用AjaxPro来实现,相关文章请参考http://blog.csdn.net/zhoufoxcn/archive/2008/01/05/2026908.aspx《AjaxPro与服务器端交互过程中如何传值》一文。
    前台aspx页面:

    <%@ 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>AjaxPro实现二级联动</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <table width="200" border="0" align="center" cellpadding="3" cellspacing="1" bordercolor="#FFFFFF" style="border-collapse: collapse">
                                    <tr align="center">
                                      <td height="20" colspan="2">
                                          <strong>AjaxPro实现二级联动</strong>&nbsp;</td>
                                    </tr>
                                    <tr class="tdbg" >
                                      <td width="30%">
                                          省份</td>
                                      <td width="70%" align="left">
                                              <asp:DropDownList ID="ddlStateList" runat="server" DataTextField="StateName" DataValueField="StateId">
                                              </asp:DropDownList></td>
                                    </tr>
                                    <tr class="tdbg" >
                                      <td><strong>城市</strong></td>
                                      <td align="left">
                                              <asp:DropDownList ID="ddlCityList" runat="server">
                                              </asp:DropDownList></td>
                                    </tr>
                                  </table>
    
        </div>
        <script language="javascript" type="text/javascript" defer="defer"> 
        function ShowCity(id)
        {
            var res=Test.GetCityList(parseInt(id)).value;
            var ddl=document.getElementById("<%=ddlCityList.UniqueID %>");
            ddl.length=0;
            if(res)
            {
                //res是服务器返回的一个List<City>集合
                for(var i=0;i<res.length;i++)
                {
                    ddl.options.add(new Option(res[i].CityName,res[i].CityId));
                    //从上面可以看出可以直接调用List<City>集合中的元素和它们的属性
                }
            }
        }
    </script>
        </form>
    </body>
    </html>

    后台.cs代码,注意为了省事,我把两个实体类也一同归并到一个.cs文件中了。

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    
    /**
     * 写作说明:本文展示了如何利用AjaxPro与服务器交互,并且还展示了在Js中可以直接调用服务器返回的集合和直接调用服务器上class的属性
     * 作者:周公
     * 日期:2008-1-1
     * 首发地址:http://blog.csdn.net/zhoufoxcn/
     **/
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                List<State> stateList = new List<State>(10);
                stateList.Add(new State(0, "选择城市"));//默认选项
                stateList.Add(new State(1,"北京"));
                stateList.Add(new State(2, "天津"));
                stateList.Add(new State(3, "上海"));
                stateList.Add(new State(4, "湖北"));
                stateList.Add(new State(5, "湖南"));
                stateList.Add(new State(6, "山西"));
                ddlStateList.DataSource = stateList;
                ddlStateList.DataBind();
                ddlStateList.Attributes["onchange"] = "ShowCity(this.options[selectedIndex].value)";
            }
            AjaxPro.Utility.RegisterTypeForAjax(typeof(Test));//注册
        }
        [AjaxPro.AjaxMethod]
        public List<City> GetCityList(int stateId)
        {
            //呵呵,都是我熟悉的城市或者区
            List<City> cityList = new List<City>(12);
            cityList.Add(new City(11, "海淀区", 1));
            cityList.Add(new City(12, "朝阳区", 1));
            cityList.Add(new City(13, "大港区", 2));
            cityList.Add(new City(14, "南开区", 2));
            cityList.Add(new City(15, "普陀区", 3));
            cityList.Add(new City(16, "黄浦区", 3));
            cityList.Add(new City(17, "黄冈市", 4));
            cityList.Add(new City(18, "荆州市", 4));
            cityList.Add(new City(19, "长沙市", 5));
            cityList.Add(new City(20, "岳阳市", 5));
            cityList.Add(new City(21, "太原市", 6));
            cityList.Add(new City(22, "大同市", 6));
            List<City> tempList = new List<City>();
            for (int i = 0; i < cityList.Count; i++)
            {
                if (cityList[i].StateId == stateId)
                {
                    tempList.Add(cityList[i]);
                }
            }
            return tempList;
        }
    }
    /// <summary>
    /// 省份信息
    /// </summary>
    public class State
    {
        private int stateId;
        private string stateName;
        /// <summary>
        /// 省份名
        /// </summary>
        public string StateName
        {
            get { return stateName; }
            set { stateName = value; }
        }
    
        /// <summary>
        /// 省份编号
        /// </summary>
        public int StateId
        {
            get { return stateId; }
            set { stateId = value; }
        }
        public State(int stateId, string stateName)
        {
            this.stateId = stateId;
            this.stateName = stateName;
        }
    }
    /// <summary>
    /// 城市信息
    /// </summary>
    public class City
    {
        private int cityId;
        private int stateId;
        private string cityName;
        /// <summary>
        /// 城市名称
        /// </summary>
        public string CityName
        {
            get { return cityName; }
            set { cityName = value; }
        }
    
        /// <summary>
        /// 城市所在省份编号
        /// </summary>
        public int StateId
        {
            get { return stateId; }
            set { stateId = value; }
        }
    
        /// <summary>
        /// 城市编号
        /// </summary>
        public int CityId
        {
            get { return cityId; }
            set { cityId = value; }
        }
    
        public City(int cityId, string cityName, int stateId)
        {
            this.cityId = cityId;
            this.cityName = cityName;
            this.stateId = stateId;
        }
    
    }
  • 相关阅读:
    秘密
    WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
    照片批量压缩、缩放、加水印工具
    在配置文件(.settings、.config)中存储自定义对象
    糟糕之至的用户体验——JavaEye你怎么就这么贱!
    AWWWB 网站克隆器 更新到1.02 修正错误
    简单的文本片段替换器
    AWWWB 网站克隆器 更新到1.01 修正错误
    2010年微软最有价值专家奖(MVP)大礼包
    WebGet2——自动爬网页工具
  • 原文地址:https://www.cnblogs.com/PearlRan/p/4833071.html
Copyright © 2020-2023  润新知