首页 > 技术文章 > Webform——中国省市三级联动以及IsPostBack

lk-kk 2015-07-19 15:41 原文

   

 

   首先要明白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);//根据选定的市辖加载市区
    }
}

 

推荐阅读