先上实体类

 

 1 public class ParentItem
 2     {
 3         public int ID { getset; }
 4         public string Name { getset; }
 5     }
 6     public class SubItem
 7     {
 8         public int ParentID { getset; }
 9         public int ID { getset; }
10         public string Name { getset; }
11     }
12     public class TestViewModel
13     {
14         public List<ParentItem> Parent { getset; }
15         public List<SubItem> Sub { getset; }
16     }

Controller中的关键代码

 

 1  public class HomeController : Controller
 2     {
 3         List<ParentItem> _parentList = new List<ParentItem>();
 4         List<SubItem> _subList = new List<SubItem>();
 5 
 6         //
 7         // GET: /Home/
 8 
 9         public HomeController()
10         {
11             _parentList.Add(new ParentItem() { ID = 1, Name = "P1" });
12             _parentList.Add(new ParentItem() { ID = 2, Name = "P2" });
13             _parentList.Add(new ParentItem() { ID = 3, Name = "P3" });
14             _subList.Add(new SubItem() { ID = 1, ParentID = 1, Name = "P1-S1" });
15             _subList.Add(new SubItem() { ID = 2, ParentID = 1, Name = "P1-S2" });
16             _subList.Add(new SubItem() { ID = 3, ParentID = 2, Name = "P2-S1" });
17             _subList.Add(new SubItem() { ID = 4, ParentID = 2, Name = "P2-S2" });
18             _subList.Add(new SubItem() { ID = 5, ParentID = 3, Name = "P3-S1" });
19             _subList.Add(new SubItem() { ID = 6, ParentID = 3, Name = "P3-S2" });
20         }
21         public ActionResult Index()
22         {
23 
24             TestViewModel model = new TestViewModel() { Parent = this._parentList, Sub = this._subList };
25 
26                                   ViewData["Parent"] = new SelectList(_parentList, "ID""Name"3);
27             ViewData["Sub"] = new SelectList(_subList, "ID""Name"3);
28             return View(model);
29         }
30         //JsonResult继承了ActionResult  
31 
32         public JsonResult GetBZ(int parentId)  //GetBZ对应View的GetBZ,parentId也是通过View可以获取参数值
33         {
34             var d = this._subList.FindAll(s => s.ParentID == parentId);
35 
36             return Json(d, JsonRequestBehavior.AllowGet);
37 
38             //这里的代码是封装过的,可以在这里写任何想要的代码  
39             //注意,由于是列表框 所以返回的值应该是List<SelectListItem>(也许不只一种传递类型)
40         }

前台

 

<script type="text/javascript">
   
$(
function(){
        $(
"#Parent").change(function(){ //Parent选项改变时激活
            var selec = $(this).val();  //获取改变的选项值
            var url = "@Url.Action("GetBZ")";  //参数依次类型(action,Controller,area)

            $(
"#Sub").find("option").remove();  //清空

            $.getJSON(url, { 
'parentId': selec }, function (data) {  //parentId是参数名和Controllers中的action参数名相同
                $.each(data, function (i, item) {
                    $(
"<option></option>").val(item["ID"]).text(item["Name"]).appendTo($("#Sub"));
                });  
//如果url访问成功  则执行function(data)这个函数(看仔细了`,这里该函数也是.getJSON的第三个参数)
            });     //function(data)获取了通过url返回来的值,并且循环读取出来
        });
    });
</script>
@Html.DropDownList("Parent","Select")
@Html.DropDownList("Sub", "Select")

 

相关文章: