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