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、这里是查询数据库的方法。  LinQ To Sql
public class StatesDA
{
    public DataClassesDataContext Context;
    public StatesDA()
    {
        Context = new DataClassesDataContext();
    }

    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 sanjiliandong : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Load(); //把三个下拉列表的数据给添加进去,这里默认的是以北京为基础的
        }
    }

    public void Load()
    {
        BindPro("0001");  //加载省份
        BindCity1("11");//根据省份加载市辖
        BindCity2("1101");//根据市辖加载市区
    }

    public void BindPro(string AreaCode)  //加载省
    {
        //将所有的省份查询出来,然后放在下拉列表里

        List<ChinaStates> list = new StatesDA().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 StatesDA().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 StatesDA().SelcetCity2(AreaCode);
        DropDownList3.DataSource = list; //下拉列表3的数据源是list
        DropDownList3.DataTextField = "AreaName"; //下拉列表3显示的是AreaName值
        DropDownList3.DataValueField = "AreaCode";//下拉列表3隐藏的是AreaCode值
        //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。
        DropDownList3.DataBind();  //数据绑定

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

 

转载于:https://www.cnblogs.com/jiangshuai52511/p/5218614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值