我的查询是制作两个级联下拉列表,用于从单个表中获取数据。 我的表就像:
我的控制器:
public JsonResult GetYear()
{
string UserName = User.Identity.Name.ToString();
return Json(dbContext.EmployeeSalaries.Where(f => f.UserName == UserName).GroupBy(f => f.Year).Select(g => g.FirstOrDefault()).ToList(), JsonRequestBehavior.AllowGet);
}
public JsonResult GetMonth(string year)
{
string UserName = User.Identity.Name.ToString();
IEnumerable<string> monthList = dbContext.EmployeeSalaries.Where(a => a.Year == year && a.UserName == UserName).Select(u => u.Month).ToList();
return Json(monthList);
}
这里我首先填写年下拉列表,根据选项填写月下拉列表。对于例如对于 UserName = 1832 ,有一年即2017年和三个月(5月,6月,7月)的数据。因此,当用户选择2017时,月份下拉列表应填充5月,6月,7月。
问题:月份下拉列表在列表中显示“未定义”。
使用了View和jQuery:
@Html.DropDownList("ddlYear", new SelectList(string.Empty, "Value", "Text"), "Please select year", new { @style = "width:250px;" })
@Html.DropDownList("ddlMonth", new SelectList(string.Empty, "Value", "Text"), "Please select month", new { @style = "width:250px;" })
<script type="text/javascript">
$.ajax({
type: "GET",
url: "/SalaryProcess/GetYear",
datatype: "Json",
success: function (data) {
$.each(data, function (index, value) {
$('#ddlYear').append('<option value="' + value.Year + '">' + value.Year + '</option>');
});
}
});
$('#ddlYear').change(function () {
// $('#ddlMonth').empty();
$.ajax({
type: "POST",
url: "/SalaryProcess/GetMonth",
data: { year: $('#ddlYear').val() },
datatype: "Json",
success: function (data) {
$.each(data, function (index, value) {
$('#ddlMonth').append('<option value="' + value.MonthId + '">' + value.Month + '</option>');
});
}
});
});
});
</script>
请建议解决此问题。
答案 0 :(得分:2)
您的GetMonth
方法存在问题。您只从EmployeeSalaries表中选择month
列,但在视图中您将它们用作模型属性(value.monthId
和value.month
)。请使用以下代码,它应该有效:
public JsonResult GetMonth(string year)
{
string UserName = User.Identity.Name.ToString();
var monthList = dbContext.EmployeeSalaries
.Where(a => a.Year == year && a.UserName == UserName)
.Select(x => new { MonthId = x.MonthId, Month = x.Month });
return Json(monthList);
}