Html.DropDownList 三级联动

Models结构

ProductorBF

 public class ProductorBF
    {
        private MyDbDataContext Context = new MyDbDataContext();

        public List<Productor> Select()
        {
            return Context.Productor.ToList();
        }

        public Productor Select(string prod_code)
        {
            var query = Context.Productor.Where(c => c.Prod_Code == prod_code);
            if (query.Count() > 0)
            {
                return query.First();
            }
            return null;
        }

BrandBF

 public class BrandBF
    {
        private MyDbDataContext Context = new MyDbDataContext();

        public List<Brand> Select()
        {
            return Context.Brand.ToList();
        }

        public List<Brand> Select(string Prod_Code)
        {
            var query = Context.Brand.Where(c => c.Prod_Code == Prod_Code);
            if (query.Count() > 0)
            {
                return query.ToList();
            }
            return null;
        }

        public bool SelectBool(string brandcode)
        {
            var query = Context.Brand.Where(p=>p.Brand_Code==brandcode);
            if (query.Count()>0)
            {
                return true;
            }
            return false;
        }
    }

CarBF

public class CarBF
    {
        private MyDbDataContext Context = new MyDbDataContext();

        public List<Car> Select()
        {
            return Context.Car.ToList();
        }

        public List<Car> Select(string Brand_Code)
        {
            var query = Context.Car.Where(c=>c.Brand==Brand_Code);
            if (query.Count()>0)
            {
                return query.ToList();
            }
            return null;
        }
    }

控制器

public ActionResult Index()
        {
            List<Productor> listP = new ProductorBF().Select();
            //参数:集合、列values值、显示的列、选取的显示值
            SelectList listProd = new SelectList(listP,"Prod_Code","Prod_Name","p001");

            List<Brand> listB = new BrandBF().Select();
            SelectList listBrand = new SelectList(listB,"Brand_Code","Brand_Name");
            ViewBag.Brands = listBrand;

            List<Car> listC = new CarBF().Select();
            SelectList listCar = new SelectList(listC,"Code","Name");
            ViewBag.Cars = listCar;
            
            return View(listProd);
        }

        [HttpPost]
        public ActionResult Index(string prod,string brand,string car)
        {
            //prod厂家编号,每次提交过来的编号都是正确的。改变厂家提交(改变第二级车系提交)过来的prod都是正确的
            List<Productor> listP = new ProductorBF().Select();
            SelectList listProd = new SelectList(listP,"Prod_Code","Prod_Name",prod);

            //根据正确的厂家编号prod查询出的车系也是正确的
            //在下拉列表中定位车系,可以判断是否是改变了车系提交过来的数据。如果没有改变车系,提交,
            //brand是上一次的旧数据,如果改变车系提交,提交过来的brand是新选取的数据
            List<Brand> listB = new BrandBF().Select(prod);
            var c = new BrandBF().SelectBool(brand) ? brand : listB[0].Brand_Code;
            SelectList listBrand = new SelectList(listB, "Brand_Code", "Brand_Name", c);
            ViewBag.Brands = listBrand;

            //与上面情况相同,页面没有操作车系的情况下,车辆的查询按上面新查出的车系编号查询
            //页面操作改变车系的情况下,按提交过来的车系编号查询
            var b = listB.Exists(p => p.Brand_Code == brand) ? brand : listB[0].Brand_Code;

            List<Car> listC = new CarBF().Select(b);
            SelectList listCar = new SelectList(listC,"Code","Name",car );
            ViewBag.Cars = listCar;

            return View(listProd);
        }

Views

<div>
        @using(@Html.BeginForm("Index","Cars",FormMethod.Post))
        {
            @Html.DropDownList("prod", Model, new { onchange = "document.forms[0].submit()" })@*js方法,值发生变化触发,效果==Html中第一个表单中的‘submit’提交*@
            @Html.DropDownList("brand",ViewBag.Brands as SelectList, new { onchange="document.forms[0].submit()" })
            @Html.DropDownList("car", ViewBag.Cars as SelectList)
        }
    </div>

效果

第一级厂家变化

第二级车系变化

posted @ 2015-07-09 23:43  九省巡按  阅读(611)  评论(0编辑  收藏  举报