DropDownListFor不select值

我在编辑页面中使用DropDownListFor帮助器方法,我没有任何运气让它select我指定的值。 我注意到在Stackoverflow的一个类似的问题 。 build议的解决方法是“在视图代码中填充您的SelectList”。 问题是,我已经尝试过这个,它仍然无法正常工作。

<%= Html.DropDownListFor(model => model.States, new SelectList(Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%> 

我已经设置了一个断点,并validation了model.AddressStateAbbr的存在(和有效性)。 我只是不知道我错过了什么。

研究了一个小时之后,我发现导致被选中的问题没有被设置为DropDownListFor 。 原因是你使用ViewBag的名称与模型的属性相同。

 public class employee_insignia { public int id{get;set;} public string name{get;set;} public int insignia{get;set;}//This property will store insignia id } // If your ViewBag's name same as your property name ViewBag.Insignia = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1); 

视图

  @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.Insignia, "Please select value") 

选定的选项不会设置为下拉列表,但是当您将ViewBag的名称更改为不同的名称时,选定的选项将显示正确。

 ViewBag.InsigniaList = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1); 

视图

  @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.InsigniaList , "Please select value") 

尝试:

 <%= Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%> 

或在剃刀语法:

 @Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --") 

基于expression式的帮助程序似乎并不尊重SelectList中的SelectListItems的Selected属性。

虽然没有解决这个问题 – 它可能会帮助未来的谷歌,如果他们遵循我的思路:

我想要一个多重select,并且这个属性在DropDownListFor上没有被自动select

 Html.DropDownListFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems, new {multiple= "multiple" }) 

相反,我应该一直使用ListBoxFor使所有的工作

 Html.ListBoxFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems) 

如果你正在做的和使用模型 – 不像所有这些ViewBag怪人 – 仍然看到这个问题,这是因为@Html.DropDownListFor(m => m.MyValue, @Model.MyOptions)无法匹配MyValue与它在MyOptions的select。 这两个潜在的原因是:

  1. MyValue为null。 你没有在你的ViewModel中设置它。 使一个MyOptions有一个Selected=true不会解决这个问题。
  2. 更为巧妙的是, MyValuetypesMyValue中的types不同。 所以,如果MyValue(int) 1 ,但是MyOptions是填充string{"01", "02", "03", ...} ,显然不会select任何东西。

我也有类似的问题,我解决如下,设置

model.States属性在你的控制器上,你需要select什么

model.States = “加利福尼亚”

然后你会得到“加利福尼亚”作为默认值。

这个问题很常见。 将viewbag属性名称更改为其他页面上使用的模型variables名称。