我创建了两个下拉列表,我要做的是让它们级联。这样第二个依赖于第一个。原因是因为我的数据库是这样布局的
****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("
答案 0 :(得分:3)
检查:http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx和http://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
。
这就是你需要做的事情,分解成易于理解的小部分。