[英]Cascading Dropdown lists MVC 3 C#
我创建了两个下拉列表,我想做的是让它们级联。 这样第二个依赖于第一个。 原因是因为我的数据库是这样布局的
****Car_iD Car_Name Car_drive**
1 Honda 2 wheel drive
2 Acura 4wheel drive
3 Toyota 2 wheel drive
4 Honda 4wheelDrive
如您所见,我有两个相同的 Car_Name,但 Car_drive 不同。 因此,当用户单击第一个下拉列表时,他们将看到 Honda、Acura、Toyota...但如果他们是 select Honda,则第二个下拉框将显示 2wheeldrive 和 4wheeldrive。
我的 Controller 看起来像这样:
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 缺少引用。 任何有助于实现这一点的帮助都会很棒。
更新我已将此添加到我的 controller
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);
}
现在需要一些帮助来编写脚本以从 controller 获取此信息。
<script type = "text/javascript">
$('#Car_Names').change(function(){
var selectedName = $(this).val();
$getJson('@Url.Action("
检查: 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,它更干净,也更容易添加新内容。
使用一些客户端 jQuery 脚本,让您的Car_Name
下拉菜单在有人更改选择时触发一个事件。
//Use your DOM identifier here. I don't know what it's called.
$('#car_name').change(function() {
//Magic here.
});
现在您要做的是,当此事件被触发时,触发一个值为 Car_Name 的Car_Name
请求。
让您的 ActionMethod 返回JsonResult
。
然后您在客户端捕获该信息,并解析数据以将 select 选项插入到您的下拉Car_Drive
中。
这就是您需要做的,分解成易于遵循的小块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.