【发布时间】:2018-01-11 00:33:09
【问题描述】:
我有两个 DropDownList。一个是给GymLocation,另一个是给那个健身房的RoomNumbers。我想让用户首先从GymLocationDropDownList 中进行选择,然后我想在RoomNumbersDropDownList 中有相应的房间号。因此,RoomNumbersDropDownList 将根据所选位置进行更新(将从数据库中查询数据)。我不知道该怎么做。
这是 BranchViewModel:
public class BranchViewModel
{
public IEnumerable<Branch> Branch { get; set; }
public IEnumerable<Room> Rooms { get; set; }
}
这是控制器。 注意:我已经硬编码了一条记录。
public ActionResult Index()
{
var item = GetBranches(3);
return View(item);
}
在这里,我得到了一个特定的分行和该分行的所有房间号。
public BranchViewModel GetBranches(int id)
{
var branch = _context.Branches.Where(b => b.Id == id).ToList();
var rooms = _context.Rooms.Where(b => b.BranchId == id).ToList();
var List = new BranchViewModel
{
Branch = branch,
Rooms = rooms
};
return List;
}
这是视图:
@model YogaFitnessClub.ViewModels.BranchViewModel
<div class="form-group col-lg-4">
@Html.LabelFor(m => m.Branch)
@Html.DropDownListFor(m => m.Branch, new SelectList(Model.Branch, "Id", "LocationName"), "Select From below Room Names", new { @class = "form-control" })
</div>
<div class="form-group col-lg-4">
@Html.LabelFor(m => m.Branch, "Room Numbers")
@Html.DropDownListFor(m => m.Rooms, new SelectList(Model.Rooms, "Id", "RoomNumber"), "Select From below Room Numbers", new { @class = "form-control" })
</div>
谢谢
【问题讨论】:
-
首先,您不能将下拉列表绑定到复杂对象的集合。您的模型需要属性绑定到例如
aint SelectedBranch`,理想情况下,集合属性应该是IEnumerable<SelectListItem> Branches。研究this DotNetFiddle中的代码 -
@Html.DropDownListFor(m => m.Rooms, ...)=> 将 DDLF 与IEnumerable集合属性绑定是没有意义的。由于您在 EF 表中有Id属性,因此请为具有int类型的 DDLF 添加选定的属性并改为绑定这些属性(本质上您是在询问级联 DDLF)。 -
我的猜测是您需要使用第一个 DDL 的值对控制器进行 Ajax 回调,以便可以填充第二个 DDL 的值。实际上,一旦您的第一个 DDL 设置了值,您就会重新加载视图(只是不这样做会导致明显重新加载视图)。
-
我认为不使用 AJAX 是无法解决的,因为您只需要重新加载
DropDownList元素,而不是整个页面。我建议你复习一下 WebApi 和 jQuery AJAX。
标签: c# html entity-framework asp.net-mvc-5