【发布时间】:2016-04-08 21:45:20
【问题描述】:
我需要一个 DropDownList 在页面中,所以我尝试这种方式:
行动:
[HttpGet]
public ActionResult GetPoint() {
...
List<SelectListItem> zooms = new List<SelectListItem>();
for (int i = 0; i <= 21; i++) {
if (i == 9)
zooms.Add(new SelectListItem() { Selected = true, Text = i.ToString(), Value = i.ToString() });
else
zooms.Add(new SelectListItem() { Selected = false, Text = i.ToString(), Value = i.ToString() });
}
model.myselectlist = zooms;
...
return View(model);
}
在视图中:
@Html.DropDownListFor(model => model.Zoom, Model.myselectlist , new { @class = "dropdown" })
正如我所料,我们有一个 DropDownList,其中 9 是选定项。
但是在同一个视图中我需要另一个 DropDown 所以这是我的实现:
[HttpGet]
public ActionResult GetPoint() {
...
List<SelectListItem> places = new List<SelectListItem>();
places.Add(new SelectListItem() { Text = "NY", Value = "NY", Selected = false });
places.Add(new SelectListItem() { Text = "CA", Value = "CA", Selected = false });
places.Add(new SelectListItem() { Text = "TX", Value = "TX", Selected = false });
places.Add(new SelectListItem() { Text = "NH", Value = "NH", Selected = true });
places.Add(new SelectListItem() { Text = "NV", Value = "NV", Selected = false });
model.myselectlistII = places;
...
return View(model);
}
在视图中我有:
@Html.DropDownListFor(model => model.Place, Model.myselectlistII , new { @class = "dropdown" })
如您所见,我有一个列表,NH 项目具有selected = true。
我希望NH 选择了一个下拉列表,但没有发生,并且始终是第一个选择的项目。
鉴于我有一个奇怪的行为,我在 Action 末尾和视图页面中 @Html.DropDownListFor 行的开头调试代码,一切正常,但在此行之后我再次检查 Model.myselectlistII已选择的项目已更改,并且所有项目都具有 false 的 Selected 属性,我不明白发生了什么?问题出在哪里?为什么第一个DropDownFor 没有改变任何东西,但第二个改变了我的列表?你有什么建议?
【问题讨论】:
-
您是否为模型字段
Place设置了任何值(例如,在构造函数中或其他地方)?如果是这种情况,它将覆盖您列表的Selected字段... -
@SamuelCaillerie 你说得对,其实我没有设置任何东西,我必须设置默认值。
-
@SamuelCaillerie 所以请发表你的答案,以供下次参考
-
这不是一个真正的答案,只是一个猜测,因为我不知道你的 ActionResult
GetPoint()和你的模型model中有什么,但你的@Html.DropDownListFor()是基于该字段的model.Place,如果这个字段被初始化了,这将覆盖你在model.myselectlistII中的Selected值...
标签: asp.net-mvc html.dropdownlistfor