我正在玩
Asp.net mvc中的Scaffolding
我的国家视图模型中有一个属性
public IEnumerable<SelectListItem> Countries { get; set; }
然而,当我创建一个视图并指定viewmodel时,它并没有像我预期的那样支持一个下拉列表.实际上它完全被忽略了.
我在编写之前编译了该项目
public int CountryId { get; set; }
正如本文所说,有一项公约在起作用
http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/
有什么想法有什么不对?
解决方法
在我目前的项目中,我遇到了这个问题,并且找不到一种快速的方法来支持我的一个实体内的一对多关系的下拉列表.
我最终做的是如下:
1-创建正常的AddView =>创建方式.
2-如果我在我的模型类中有一个ID属性,则defaul; t模板将生成类似这样的内容以在我的视图中表示此属性:
<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,我可以将其传递给我的视图并使用它来为DrobDown提供它的项目.
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视图中使用相同的模型也导致了一个工作.
试一试,让我知道发生了什么,谢谢.