Asp.net mvc dropdownlist不显示/保留列表中第一个选项的空值

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来处理第一点

我有一个通过SharpArch的MVC应用程序。我认为:

 Html.DropDownListFor(x => x.Location, 
     new SelectList(Model.PossibleLocations, "Id", "Address"), 
     "-- No Location --")
我有两个问题

  • 视图绑定到模型时,下拉列表不会更新
  • 除非我尝试顶部的“无位置”,否则选择将正确保留
  • 我可以通过将x.Location更改为x.Location.Id来处理第一点,但随后我遇到了其他问题

    我可以找到很多关于DropDownList的例子,但是没有一个例子显示保存空值

    感谢您的帮助

    谢谢

    更新:


    我刚刚升级了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。