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。 这两个潜在的原因是:
-
MyValue
为null。 你没有在你的ViewModel中设置它。 使一个MyOptions
有一个Selected=true
不会解决这个问题。 - 更为巧妙的是,
MyValue
的types与MyValue
中的types不同。 所以,如果MyValue
是(int) 1
,但是MyOptions
是填充string{"01", "02", "03", ...}
,显然不会select任何东西。
我也有类似的问题,我解决如下,设置
model.States属性在你的控制器上,你需要select什么
model.States = “加利福尼亚”
然后你会得到“加利福尼亚”作为默认值。
这个问题很常见。 将viewbag属性名称更改为其他页面上使用的模型variables名称。