级联下拉列表MVC 3 C#

时间:2012-04-04 17:48:35

标签: c# asp.net-mvc

我创建了两个下拉列表,我要做的是让它们级联。这样第二个依赖于第一个。原因是因为我的数据库是这样布局的

****Car_iD      Car_Name            Car_drive** 
      1           Honda             2 wheel drive
      2           Acura             4wheel drive        
      3           Toyota            2 wheel drive
      4           Honda             4wheelDrive       

正如你所看到的,我有两个相同的Car_Names,但Car_drive是不同的。因此,当用户点击第一个下拉列表时,他们将看到本田,讴歌,丰田......但如果他们选择本田,则第二个下拉框将显示2wheeldrive和4wheeldrive。

我的控制器看起来像这样:

 public ActionResult Home()
  {
  ViewData["Car_Name"] = new SelectList(_context.Cars.Select(a => a.Car_Name).Distinct());
   ViewData["Car_drive"] = new SelectList(_context.Cars.Select(a => a.Car_drive).Distinct());
  }

我的视图看起来像这样

      Choose an Car
               <label for= "Car_Names"></label>
                <%= Html.DropDownList("Car_Name" )%>  

               <label for= "Application_Names"></label>
                <%= Html.DropDownList("Car_drive")%>    
                <input type = "submit" value ="Update" /> 
                 <% using(Html.BeginForm("Home", "Home")) { %>  
                <%}%>       

我已阅读了这么多教程,但没有真正接近。我接近MVC Awesome的东西,但我不断收到错误,说SelectableItem缺少引用。任何帮助实现这一点都会很棒。

更新 的 我已将此添加到我的控制器

    public ActionResult CarNameChange(string Car_Name)
    {
        var car_drive = from env in _context.Cars
                              where env.Car_Name == Car_Name
                              select car_drive;
        return Json(ViewData["Car_Drive"] = car_drive); 
    }

现在需要一些帮助编写脚本来从控制器获取此信息。

   <script type = "text/javascript">
   $('#Car_Names').change(function(){
      var selectedName = $(this).val();
       $getJson('@Url.Action("

2 个答案:

答案 0 :(得分:3)

检查:http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspxhttp://msprogrammer.serviciipeweb.ro/2011/02/13/asp-net-mvc-jquery-and-razor-cascading-dropdown-retrieving-partial-views-json-send-objects-handling-errors/,您不需要任何其他内容。这两个项目都有一个下载的示例来检查代码。

此致

编辑:更新后

不要使用ViewData或ViewBag。制作包含Cars和CarDrive属性的ViewModel,它更清晰,更容易添加新内容。

答案 1 :(得分:2)

使用某些客户端jQuery脚本,只要有人更改了选择,就可以将Car_Name下拉列表触发。

//Use your DOM identifier here. I don't know what it's called.
$('#car_name').change(function() {
    //Magic here.
});

现在你要做的是,当这个事件被触发时,触发一个值为Car_Name的AJAX请求。

让你的ActionMethod返回JsonResult

然后,您可以在客户端捕获该信息,并解析数据以将选择选项插入下拉列表Car_Drive

这就是你需要做的事情,分解成易于理解的小部分。