来自MVC(Razor)中单个表的级联下拉列表

时间:2017-09-06 10:11:05

标签: linq asp.net-mvc-4

我的查询是制作两个级联下拉列表,用于从单个表中获取数据。 我的表就像:

enter image description here

我的控制器:

    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月。

问题:月份下拉列表在列表中显示“未定义”。

enter image description here

使用了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>

请建议解决此问题。

1 个答案:

答案 0 :(得分:2)

您的GetMonth方法存在问题。您只从EmployeeSalaries表中选择month列,但在视图中您将它们用作模型属性(value.monthIdvalue.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);
}