我是MVC和JavaScript的新手,我对DropDownList有疑问。
我建立了一个“汽车租赁”程序,我有一个允许添加新车到库存的视图。
该视图包含2个下拉列表(见下文):
<div class="editor-field">
@Html.DropDownList("ManufacturerId", string.Empty)
@Html.ValidationMessageFor(model => model.ManufacturerId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ModelId)
</div>
<div class="editor-field">
@Html.DropDownList("ModelId", string.Empty)
@Html.ValidationMessageFor(model => model.ModelId)
</div>
我希望当用户选择制造商(例如阿尔法罗密欧)时,“模型”列表框将仅显示“Alfa Mito”型号,而不是完整列表......
My Controller功能使用ViewBag向视图发送模型列表,如下所示:
public ActionResult AddNewCar()
{
ViewBag.ManufacturerId = new SelectList(db.Manufacturers, "ManufacturerId", "ManufacturerName");
ViewBag.ModelId = new SelectList(db.Models, "ModelId", "ModelName");
ViewBag.BranchId = new SelectList(db.Branchs, "BranchId", "BranchName");
return View();
}
请建议。
谢谢, 阿尔莫格
答案 0 :(得分:0)
在下拉更改事件中从jquery调用下面的action方法。
public List<carmodels> PopulateState(int manufacturerId)
{
var carmodelsObj = (from st in dc.Carmodels
where st.manufacturerId.Equals(manufacturerId)
select st).ToList();
return (carmodelsObj);
}
答案 1 :(得分:0)
每次第一次下拉菜单更改时(使用ModelId
),您都需要重新填充/填充jquery
下拉列表。请执行以下操作:
从更改事件的第一个下拉列表中获取ManufactureId
。并发出ajax
来重新填充您的第二个下拉列表。
$("#ManufactureId").change(function() {
var manufacturerId = manufacturer$('#ManufacturerId').val();
$.ajax({url: "~/Car/GetCarsByManufacturer", success: function(result){
//re populate your second dropdown here
//hint: you may use response.id for value
}});
});
在控制器中创建一个根据所选内容返回Car Models的函数。 (使用ajax在上一步中调用此函数)。
public List<carmodels> GetCarsByManufacturer(int manufacturerId)
{
var carmodelsObj = (from st in dc.Carmodels
where st.manufacturerId.Equals(manufacturerId)
select st).ToList();
return (carmodelsObj);
}