• Webform——中国省市三级联动以及IsPostBack


       

       首先要明白Webform的运行顺序,当开始启动时候,首先执行的是Page_Load事件, 当点击任意按钮后,每次点击都要先执行一遍Page_Load(在这里Page_Load里面的事件是给数据控件加载数据)事件,然后才执行按钮上的内容。

       但是如果是一个数据控件,里面存的是一些数据,如果用foreach遍历逐项给数据控件添数据的话,每次点击按钮(即刷新页面)都会执行一遍Page_Load,也就是说每次都要重复添加原来的数据,所以这就需要一个判断条件,使它只会第一次启动的时候走Page_Load事件,这样就能避免重复添加数据的情况。。

        所需要的判断条件是:IsPostBack 该值是bool型的,它反映的是 页是否是第一次呈现还是为了响应回发而加载,如果是为了响应回发而加载 即为True,反之为False。

        中国省市的三级联动:

        总体思路是,在页面上做三个下拉列表,分别对应省、市辖、市区。 当页面加载的时候,将对应的数据添加到下拉列表中。用的是DataSouece属性,当然这里最后比Winform多了一步,需要将数据最后再绑定上,即DataBind(); 因为这里Page_Load里加载的是数据控件,所以需要加判断条件if(!IsPostBack),里面的!是取相反的值,因为当第一次页面加载的时候并不是为了"响应回发"而加载,所以结果为false,加上! 变成True,这样就只会在第一次启动的时候加载数据,从而不会重复添加。当三个列表全部加载好后,这时就需要改变某个下拉列表的值,从而实现联动效果。。 用到的是需要用到的是SelectedIndexChanged事件,并且要把dropdownlist对象中叫AutoPostBack(当选定内容更改后,自动回发到服务器)的值改为True,只有改成True,选定的内容才能上传回服务器,从来才会重新加载。

        下面是代码:

    1、这里是查询数据库的方法。  LinQToSql
    public class ChinaBF
    {
        private MyDBDataContext _context = new MyDBDataContext();
        public ChinaBF()
        {
            
        }
    
    
        public List<ChinaStates> SelcetPro(string AreaCode)  //加载所有省份
        {
    
            return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList();
        }
    
    
        public List<ChinaStates> SelcetCity1(string AreaCode)  //根据省份加载市辖
        {
            return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList();
        }
    
        public List<ChinaStates> SelcetCity2(string AreaCode)  //根据市辖加载市区
        {
            return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList();
        }
    }
    
    2、这里是服务器代码。
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)   //页面加载的时候
        {
            //只要在页面里点击按钮或者刷新网页,都是先走的Page_Load这一步,所以有些时候会出现数据重复的可能,为此,必须加一个判断条件,看看是不是第一次加载
            if(!IsPostBack)   //IsPostBack 获取一个值,看看指示页是第一次呈现,还是为了响应回发而加载。如果是为了响应回发,那么结果就是true
            {
                        //运行顺序一定要清楚,先运行Page_Load
                        //当页面刚刚加载的时候,把三个下拉列表的数据给添加进去,这里默认的是以北京为基础的。
                Load();  //加载所有的表
    
            }
        }
        public void Load()
        {
            BindPro("0001");  //加载省份
            BindCity1("11");//根据省份加载市辖
            BindCity2("1101");//根据市辖加载市区
        }
        public void BindPro(string AreaCode)  //加载省
        {
            //将所有的省份查询出来,然后放在下拉列表里
     
            List<ChinaStates> list = new ChinaBF().SelcetPro(AreaCode);
            DropDownList1.DataSource = list; //下拉列表1的数据源是list
            DropDownList1.DataTextField = "AreaName"; //下拉列表1显示的是AreaName值
            DropDownList1.DataValueField = "AreaCode";//下拉列表1隐藏的是AreaCode值
            //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。
            DropDownList1.DataBind();  //数据绑定
    
        }
    
        public void BindCity1(string AreaCode)  //加载市辖
        {
            //根据选定的省份查询出相对应的市辖,这里以北京为基础
            List<ChinaStates> list = new ChinaBF().SelcetCity1(AreaCode);
            DropDownList2.DataSource = list; //下拉列表2的数据源是list
            DropDownList2.DataTextField = "AreaName"; //下拉列表2显示的是AreaName值
            DropDownList2.DataValueField = "AreaCode";//下拉列表2隐藏的是AreaCode值
            //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。
            DropDownList2.DataBind();  //数据绑定
    
        }
        public void BindCity2(string AreaCode)  //加载区
        {
            //根据选定的市辖查询出相对应的市市区,这里以北京市辖为基础
            List<ChinaStates> list = new ChinaBF().SelcetCity2(AreaCode);
            DropDownList3.DataSource = list; //下拉列表3的数据源是list
            DropDownList3.DataTextField = "AreaName"; //下拉列表3显示的是AreaName值
            DropDownList3.DataValueField = "AreaCode";//下拉列表3隐藏的是AreaCode值
            //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。
            DropDownList3.DataBind();  //数据绑定
    
        }
    
    
    
        //下面是当下拉列表的值改变的时候,其余两个也随之改变 ,,需要用到的是SelectedIndexChanged事件,并且要把dropdownlist对象中叫AutoPostBack(当选定内容更改后,自动回发到服务器)的值改为True,只有改成True,选定的内容才能上传回服务器
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            string Pro = DropDownList1.SelectedValue.ToString(); //加载市辖
            BindCity1(Pro); //根据选定的省份加载市辖
    
            string City = DropDownList2.SelectedValue.ToString();//加载市区
            BindCity2(City);//根据选定的市辖加载市区
        }
        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            string City = DropDownList2.SelectedValue.ToString();//加载市区
            BindCity2(City);//根据选定的市辖加载市区
        }
    }
  • 相关阅读:
    offsetLeft,Left,clientLeft的区别
    IIS 内部运行机制
    常用正则表达式
    千万不要把 bool 设计成函数参数
    ASP.NET第一课,IIS安装与配置
    将字符串转为变量名(C#)
    淘宝技术发展
    C# 反射机制
    技术普及帖:你刚才在淘宝上买了一件东西
    高性能分布式计算与存储系统设计概要——暨2012年工作3年半总结
  • 原文地址:https://www.cnblogs.com/lk-kk/p/4658717.html
Copyright © 2020-2023  润新知