为了进行级联下拉菜单,我遵循了this很好的教程。但是我在整个过程中做了一些更改。 总结一下,我有两个下拉菜单,其中一个应该控制另一个。第一个运行良好,它返回了我期望的数据。 第二个,它返回我期望的正确数量,但是所有不同的项目都以“未知”形式出现。
例如,我在第一个下拉菜单中选择了一个名称,第二个下拉菜单更改为与第一个下拉菜单相关的正确项目数量,但信息/项目不明。
在我的.cshtml上,
<div class="editor-label">
@Html.LabelFor(model => model.VId, "vendor")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.VId, ViewBag.VendorName as SelectList, "--Select Vendor--", new { @class = "form-control" })
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IFID, "family")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.IFID, ViewBag.FamilyName as SelectList, "--Select Family--", new { @class = "form-control" })
</div>
此外,在我的.cshtml上,我还有创建jquery脚本的部分:
@section scripts {
<script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.10.2.js" type="text/javascript"></script>
<script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.10.2.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js" type="text/javascript"></script>
<script>
$(document).ready(function ()
{
//Dropdownlist Selectedchange event
$("#VId").change(function ()
{
$("#IFID").empty();
$.ajax({
type:'POST',
url: '@Url.Action("SelectFamilies")',
dataType: 'json',
data: { id: $("#VId").val() },
success: function (families)
{
alert($("#VId").val());
alert(families.dataType);
$.each(families, function (i, family)
{
$("#IFID").append('<option value="'
+ family.IFID + '">'
+ family.IndexFamilyName + '</option>');
});
},
error: function (ex)
{
alert('Failed to retrieve states.' + ex.responseText);
}
});
return false;
})
});
</script>
}
在此.cshtml上,我指向一个@model,它以这种方式定义变量:
public virtual ICollection<IFDto> families { get; set; }
public virtual ICollection<VDto> vendors { get; set; }
public virtual VDto vendor { get; set; }
public virtual IFDto family { get; set; }
“ @ Url.Action(“ SelectFamilies”)”来自(在控制器中):
public JsonResult SelectFamilies(int id)
{
//IEnumerable<IFDto> families = db.states.Where(stat => stat.country_id == id);
IEnumerable<IFDto> families = _indexfamilyDataGateway.GetFamiliesByVendor(id);
return Json(families);
}
此外,在同一控制器上,我有:
public ActionResult Create()
{
//ViewBag.VendorName = GetVendorSelectItems();
//ViewBag.FamilyName = GetFamilySelectItems();
ViewBag.VendorName = new SelectList(_vendorDataGateway.GetAll(), "VId", "AbbrevAndName");
ViewBag.FamilyName = new SelectList(_indexfamilyDataGateway.GetAll(), "IFID", "IFName");
return View();
}
在其中一项评论中,要求我(也是一个好主意)在.ajax成功文件内执行“ console.log(families)”。它返回我需要的信息: 请注意,由于我放入了“控制台”,它正在打印4次。 .ajax成功之前和之后的“每个”语句。如果我只是在成功之后放在$ .each之前,它将返回一个数组。
答案 0 :(得分:0)
由@Ammar提供的一个好主意是使用“ console.log(families)”,我能够弄清楚在.ajax $ .each里面我是错误地使用了:
+ family.IFID + '">'
+ family.IndexFamilyName +
何时应该使用:
+ family.iFID + '">'
+ family.indexFamilyName +
问题是在“。”之后错误地使用了大写字母。