级联下拉列表&视图模型

时间:2017-06-27 18:33:03

标签: javascript asp.net asp.net-core cascadingdropdown

我有以下模型:Department(作为城市),DistrictStore

Department有一对多Districts

Districts有一对多Stores

我构建了一个视图,我在其中创建了一个新商店,用户可以选择部门(城市),然后区域下拉列表会立即与相应的区域进行更新。

为此我创建了这个ViewModel:StoreIndexData

public class StoreIndexData
{
    public Store Stores { get; set; }
    public Department Departments { get; set; }
}

这是我填充Department的下拉列表的控制器:

    public IActionResult Create()
    {
        //Departaments List
        List<Department> Departmentlist = _context.Departments.ToList();
        Departmentlist.Insert(0, new Department { DepartmentID = 0,
                              DepartmentName = "Select" });

        ViewBag.DepartmentList = new SelectList(Departmentlist,
                                "DepartmentID", "DepartmentName");
        return View();
    }

这就是视图:

@model Application.Models.ApplicationviewModels.StoreIndexData

<form asp-action="Create">
<div class="form-horizontal">
    <h4>Store</h4>
    <hr />
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>

    <div class="form-group">
        <label asp-for="Departments.DepartmentID" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            <select asp-for="Departments.DepartmentID" 
             class="form-control" asp-items="ViewBag.DepartmentList"></select>
        </div>
    </div>

    <div class="form-group">
        <label asp-for="Stores.DistrictID" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Stores.DistrictID, new SelectList(" "), "Select", new { @class = "form-control"})
        </div>
    </div>

在视图的最后,这是我的JS部分:

@section Scripts {
<script src="~/js/jquery-3.2.1.min.js"></script>
<script>
    $(document).ready(function () {
        $("#DepartmentID").change(function () {
            $.get("/Stores/GetDistrictList", { DepartmentID: $("#DepartmentID").val() }, function (data) {
                $("#DistrictID").empty();
                $.each(data, function (index, row) {
                    $("#DistrictID").append("<option value='" + row.DepartmentID + "'>" + row.DepartmentName + "</option>")
                });
            });
        })
    });
</script>

本节将此操作称为:

        public JsonResult GetDistrictList(int DepartmentID)
    {
        List<District> DistrictList = _context.Districts.Where(x => x.DepartmentID == DepartmentID).ToList();
        return Json(DistrictList);
    }

就是这样。

当我运行应用程序时,区域下拉列表不会填充 的 _Questions:

  • 我是否有可能在JScript "#DepartmentID"中访问此属性,因为我使用的是viewmodel?也许我需要把它改成像#34; #Departments.DepartmentID&#34;?

  • 这可以使用ViewModel吗?我没有在商店模型中添加部门属性,因为它与部门通过区域无关。

  • 我在示例中看到我跟着他们添加了这一行 ProxyCreationEnabled = false 在JsonResult内部动作。我没有添加它,因为我不知道它做了什么,如果我添加它,我也不知道应用程序中的连接。

提前感谢您的帮助。

此致

_Update

我在这条线上放了一个断点,在JsonResult里面:

List<District> DistrictList = _context.Districts.
  Where(x => x.DepartmentID == DepartmentID).ToList();  

但是当我使用部门下拉列表来调用JsonResult时,应用程序并未停止。我相信脚本部分可能是错误的。

0 个答案:

没有答案