我在级联下拉列表中遇到问题,其中第二个 ddl 应该出现在部分视图中,我无法自己处理。请帮我弄清楚为什么我有以下包?
因此,我对用户可以选择品牌的第一个 ddl 有一个看法:
@Html.DropDownList("brands", new SelectList(
@ViewBag.Brands, "Id", "BrandName"),
"--select a Brand--",
new
{
id = "ddlBrands",
data_url = Url.Action("ChooseModel", "Home")
})
<div id="divModel"></div>
ChooseModel 方法返回以下部分视图:
<div id="chooseModel">
<div class="lead">Model</div>
@Html.DropDownList("models", new SelectList(Enumerable.Empty<SelectListItem>
(), "Id", "ModelName"),
"--select a Model--",
new { id = "ddlModels" })
</div>
当用户在 ddlBrands 中选择一个项目时,应该会出现另一个模型下拉列表。因此,脚本如下所示:
$(function () {
$("#ddlBrands").change(function () {
var url = $(this).data('url');
var value = $(this).val();
$('#divModel').load(url, { id: value });
var brandId = $(this).val();
$('#divModel').html("");
$.getJSON("../Home/LoadModels", { brandId: brandId },
function (modelData) {
var select = $("#ddlModels");
select.empty();
select.append($('<option/>', {
value: 0,
text: "-- select a Model --"
}));
$.each(modelData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
});
最后, LooksModels 方法加载特定品牌的模型:
public JsonResult LoadModels(string brandId)
{
if (string.IsNullOrEmpty(brandId))
return Json(HttpNotFound());
var modelList = unitOfWork.ModelRepository
.GetModelListByBrand(Convert.ToInt32(brandId)).ToList();
var modelData = modelList.Select(m => new SelectListItem()
{
Text = m.ModelName,
Value = m.Id.ToString()
});
return Json(modelData, JsonRequestBehavior.AllowGet);
}
因此,当我启动应用程序并在第一个 ddl 中选择品牌时,子模型在第二个中显示良好。然后我选择了另一个品牌,再次出现了合适的型号。但是当我选择我第一次选择的品牌时,我无法选择任何型号 - ddlModels 只显示我--选择一个型号--。
你能告诉我脚本中有什么错误(我想)吗?