我的选择列表没有选择通过代码引入的默认对象。
我首先像这样创建我的 SelectList
:
public SelectList CreateSelectList(object objSelected = null)
{
return new SelectList(GetAll().OrderBy(s => s.NumericalValue), "PeriodID", "Name", objSelected);
}
我的 objSelected 填充了一个与 PeriodID 关联的 Guid。
在我的 Controller 中,我将我的 viewbag
变量定义为新的选择列表。
public ActionResult Edit(Guid id)
{
Classroom classroom = classroomRepository.GetByID(id);
ViewBag.PeriodID = periodRepository.CreateSelectList(classroom.PeriodID);
return View(classroom);
}
然后在我的 View 中显示我的 SelectList
的方式如下:
<div class="control-group">
@Html.LabelFor(model => model.PeriodID, "Period", new { @class = "control-label" })
<div class="controls">
@Html.DropDownListFor(model => model.PeriodID, ViewBag.PeriodID as SelectList, String.Empty, new { @class = "span3" })
@Html.ValidationMessageFor(model => model.PeriodID)
</div>
</div>
最佳答案
这里有两个问题。首先,这个:
@Html.DropDownListFor(model => model.PeriodID, ViewBag.PeriodID as SelectList,
String.Empty, new { @class = "span3" })
将 ViewBag.PeriodID 更改为 ViewBag.Periods 或 ViewBag.PeriodList。这很令人困惑,如果您使用相同的命名对象,在很多情况下 MVC 都会感到困惑。最好确保一切都以不同的方式命名。
其次,SelectList类忽略了SelectListItem的selecteditem成员。它根本没有被使用。 DropDownListFor 将采用 model.PeriodID 的值并将其设为选定值。但是,我在您的代码中看到它们应该相同,所以我猜命名可能是这里的一个因素。
关于asp.net-mvc - MVC4 SelectList 未选择默认对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655479/