我有以下模型:Department
(作为城市),District
和Store
。
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时,应用程序并未停止。我相信脚本部分可能是错误的。