Asp.net mvc dropdownlist不显示/保留列表中第一个选项的空值
我有一个通过SharpArch的MVC应用程序。我认为:Asp.net mvc dropdownlist不显示/保留列表中第一个选项的空值,asp.net-mvc,null,drop-down-menu,sharp-architecture,Asp.net Mvc,Null,Drop Down Menu,Sharp Architecture,我有一个通过SharpArch的MVC应用程序。我认为: Html.DropDownListFor(x => x.Location, new SelectList(Model.PossibleLocations, "Id", "Address"), "-- No Location --") 我有两个问题 视图绑定到模型时,下拉列表不会更新 除非我尝试顶部的“无位置”,否则选择将正确保留 我可以通过将x.Location更改为x.Location.Id来处理第一点
Html.DropDownListFor(x => x.Location,
new SelectList(Model.PossibleLocations, "Id", "Address"),
"-- No Location --")
我有两个问题
我刚刚升级了Resharper(一个小的更新),并得到提示填写DropDownList for。为什么会有不同?它可以绑定,但现在根本不起作用。尝试“展平”您的模型类,以便LocationId是您绑定到的实际值(即,向您的模型添加“LocationId”属性,并为
x=>x.LocationId
)创建下拉列表。您可以始终插入“空”属性在传递到视图之前,将列表项
选择到您的可能位置
集合中,并在发布表单时检查该“空”值(例如0)
model.PossibleLocations.Insert(0,
new SelectListItem() { Text = "-- No Location --", Value = "0" };
听起来不太好。模型为WorkOrder*--0 | 1位置
。我不应该明确地处理ID,不是吗?另外,我在下拉列表中找不到任何关于将顶部项目保持为空的文档。@adymitruk:所以每个工作单可能有一个或没有位置,每个位置可以有任意数量的工作单,对吗?通常,这是使用(可为空)标量外键值(WorkOrder.LocationId)建模的。可以这样想:您没有更改位置的ID值:您正在更改WorkOrder引用的位置。因此,将LocationId设置为可为null的int。如果随后添加一个值为“”的可能位置,类似于hunter的响应,则在选择该项时,您应该能够让它识别null值。是的。也就是说,在db中没有“notnull”约束。足够接近。最后,我向原始位置集合添加了一个null对象,并在控制器中输入了一些代码,以便在指定null对象时将属性设置为null。