关于MVC2下的三级联动

最近有个项目需要用到三级联动,在网上查了比较多的源码,都是不可行。所以打算从某个源码中进行修改。

由于使用HTML.DROPDOWNLIST做的话,有用到ajax来重新填入的问题。本人对ajax接触的比较少,几乎是不怎么会,所以在做到这步的时候遇到了困难。

之后采用<select标签来做。但是在做C层的时候,遇到一个困难,就是Linq to entity中是不支持类似于int.parse和converst.int32等的强制转换的,所以在id传值的时候,就遇到了问题,特别是进行查找的时候,最后使用了泛型解决了这个问题。

在linq to entity中由于不支持tostring()等函数,所以普通的类型转化他是不支持的,在string 转换到int 类型的时候,可以使用类似于以下语句来进行转化。

 

  
  
  
  
  1. string a="1,3,4,5,6";  
  2.  
  3. List<int> result = new List<string>(a.Split(',')).ConvertAll(i => int.Parse(i));  
  4.  
  5. int a1=result[0];  
  6. int a2=result[1];  
  7. ....... 

类似的也可以通过泛型来进行其他类型的转化。

关于三层联动的代码主要是借鉴于http://leelei.blog.51cto.com/856755/347636这位朋友的代码。我只是将linq to class 转化为了linq to entity。

只是有个问题想不通,为什么我建立外键约束后就不能查询到数据显示在下拉框了呢?这个是什么原因?????

终于把三级联动做完了,直接通过selectlistitem来赋值给select中,就能够获得值了。

代码参考:

 

  
  
  
  
  1. List<int> result = new List<string>(id.Split(',')).ConvertAll(i => int.Parse(i));  
  2.            int groupid = result[0];  
  3.            int companyid = result[1];  
  4.            IQueryable<department_info> queryResult = _HrDb.department_info;  
  5.            List<department_info> queryResult2 = queryResult.Where(E => E.Group_id==groupid && E.Company_id == companyid).ToList();  
  6.            List<SelectListItem> mkite = new List<SelectListItem>();  
  7.            foreach (var item in queryResult2)  
  8.            {  
  9.                mkite.Add(new SelectListItem { Text = item.Department_name.ToString(), Value = item.Department_id.ToString() });  
  10.            }  
  11.            //var b = testDataContext.TLEquipment.Where(E => E.companyId.Equals(companyId) && E.plantId.Equals(plantId)).ToList();  
  12.            return Json(mkite, JsonRequestBehavior.AllowGet); 

 前台在获取值的时候,jquery改成获取select中value和text值既可以。

 

数据库和它一样。下面是代码

你可能感兴趣的:(三级联动,职场,MVC2,休闲)