在我的当前项目中,我遇到了这个问题,并且找不到一种快速的方式来搭建一个实体内部的一对多关系的下拉列表。最终我做的如下:
1- 创建正常的AddView => Create方式。
2- 如果我的模型类中有一个ID属性,那么默认模板将生成类似于以下内容来表示此属性在我的视图中:
<div class="editor-label">
@Html.LabelFor(model => model.CityID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CityID)
@Html.ValidationMessageFor(model => model.CityID)
</div>
3- 现在我需要用一个可用的模板替换这个默认模板,所以我在CREATE
方法中编写了以下代码:
IEnumerable<SelectListItem> cityItems = dataContext.Cities.AsEnumerable().Select(c => new SelectListItem()
{
Text = c.Name,
Value = c.ID.ToString(),
Selected = false,
});
SelectList cityList = new SelectList(cityItems, "Value", "Text");
ViewBag.CityList = cityList;
这将获取“Cities”表并创建一个Selectlist,我可以将其传递给我的视图,并使用它来提供DropDown的项目。
4- 将我的视图中的默认代码替换为以下代码之一:
<div class="Post-label">
<div class="editor-label">
@Html.LabelFor(model => model.CityID)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.CityID, ViewData["CityList"] as SelectList)
@Html.ValidationMessageFor(model => model.CityID)
</div>
</div>
我之所以使用 ViewData["CityList"]
而不是ViewBag.CityList
,是因为前者可行但后者不行。
5- 现在我的视图正在正常工作,并且正在获取 City
数据,就像我预期的那样,在我的 Edit
视图中使用相同的模型也导致它能够工作。
试一试,然后告诉我发生了什么,谢谢。