嘿嘿,周六周日網絡沒啦,甚是糾結啊,終於在不懈的努力下重新擁有了網絡,激動哦,於是今天在這里又開始了我的新的一個月的博客旅歷,其實上周是要總結三級聯動的,但是沒有太多的時間總結於是就到了今天,簡單的總結一下吧,剛開始在winform中其實已經總結過了三級聯動,但是在這里我們使用了ajax技術異步傳輸,就不需要更新頁面,下面就來簡單的總結一下吧。
上面是前台類的實現代碼,在這里我們看到使用的是jquery和ajax技術,實現我們通過post獲取value值來給下一級傳一個id,通過id來獲取選取的name值和id值。下面就來看下后台類和bll層的代碼和dal代碼。
public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string province = context.Request.Form["province"]; //在前台類獲取 string cityid = context.Request.Form["city"]; if (context.Request.HttpMethod == "POST") { //這些東西應拿到if判斷里面創建 ProvinceBll pbll = new ProvinceBll(); CityBll cbll = new CityBll(); AreaBll abll = new AreaBll(); StringBuilder builder = new StringBuilder(); //province如果為空,則為頁面加載,將所有的省份取出返回頁面 //,否則取出省份下的所有市 if (string.IsNullOrEmpty(province)) { foreach (var item in pbll.GetAllProvince()) { //拼接option標簽 builder.Append("<option value=" + item.provinceID + ">" + item.provincename + "</option>"); } context.Response.Write(builder.ToString()); } else { //如果城市id為空,則為觸發省的change事件的請求 if (string.IsNullOrEmpty(cityid)) { //此時省份id不為空,觸發了change事件,然后根據省份的id,找出所有的父id為province的city foreach (var item in cbll.GetAllCityByProid(Convert.ToInt32(province))) { //拼接option標簽 builder.Append("<option value=" + item.cityID + ">" + item.cityname + "</option>"); } context.Response.Write(builder.ToString()); } else { //如果城市id不為空,則為觸發城市的change事件的請求,然后根據cityid,查找area表中所有父id為cityid的區信息 foreach (var item in abll.GetAllAreaByCityid(Convert.ToInt32(cityid))) { //拼接option標簽 builder.Append("<option value=" + item.id + ">" + item.areaname + "</option>"); context.Response.Write(builder.ToString()); } } } } }
public class ProvinceDal { /// <summary> /// 查詢所有的省份 /// </summary> /// <returns>reader類型</returns> public List<ProvinceModel> GetAllProvince() { string sql = "select * from province"; SqlDataReader reader = SqlHelper.ExecuteReader(sql); List<ProvinceModel> list = new List<ProvinceModel>(); while (reader.Read()) { ProvinceModel model = new ProvinceModel(); model.id =Convert.ToInt32(reader[0]); model.provinceID = reader[1].ToString(); model.provincename = reader[2].ToString(); list.Add(model); } return list; } }
public class CityDal { CityModel model = new CityModel(); /// <summary> /// 通過上一級的省份獲取其proid查詢所有的市區 /// </summary> /// <param name="proid">省份id</param> /// <returns>reader類型</returns> public List<CityModel> GetAllCityByProid(int proid) { string sql = "select * from city where father = @proid"; SqlParameter parms = new SqlParameter("@proid",proid); SqlDataReader reader = SqlHelper.ExecuteReader(sql,parms); List<CityModel> list = new List<CityModel>(); while (reader.Read()) { CityModel model = new CityModel(); model.id = Convert.ToInt32(reader[0]); model.cityID = reader[1].ToString(); model.cityname = reader[2].ToString(); model.father = reader[3].ToString(); list.Add(model); } return list; } }
public class AreaDal { /// <summary> /// 通過城市的id來查詢縣區 /// </summary> /// <param name="cityid">城市id</param> /// <returns>reader類型</returns>
public List<AreaModel> GetAllAreaByCityid(int cityid)
{
string sql = "select * from area where fathor=@cityid";
SqlParameter parms = new SqlParameter("cityid",cityid);
SqlDataReader reader = SqlHelper.ExecuteReader(sql, parms);
List<AreaModel> list = new List<AreaModel>();
while (reader.Read()) {
AreaModel model = new AreaModel();
model.id =Convert.ToInt32(reader[0]);
model.areaID = reader[1].ToString();
model.areaname = reader[2].ToString();
model.father = reader[3].ToString();
list.Add(model); } return list;
}
}
就僅僅寫了ui層的類和dal層的代碼,但是我感覺通過這樣的寫法下次在彭代三級聯動時間我會很簡單的就寫出來啦,寫這個時間還是遇到啦好多的問題,或許有的是粗心忘記寫上去啦,也或許是真的不清楚思路,還有謝謝友友的辛苦勞動,嘿嘿,總之,寫完這個其實並不順利的,但是我相信我不會僅僅就寫着一邊的,我會繼續練習的,嘿嘿,繼續努力的,加油加油!!!