2

我的选择列表没有选择通过代码引入的默认对象。

我首先SelectList像这样创建我的:

public SelectList CreateSelectList(object objSelected = null)
{
  return new SelectList(GetAll().OrderBy(s => s.NumericalValue), "PeriodID", "Name", objSelected);
}

我的 objSelected 填充了与 PeriodID 关联的 Guid。

在我的控制器内部,我将viewbag变量定义为新的选择列表。

public ActionResult Edit(Guid id)
{
  Classroom classroom = classroomRepository.GetByID(id);
  ViewBag.PeriodID = periodRepository.CreateSelectList(classroom.PeriodID);
  return View(classroom);
}

然后在我的视图中,这是我显示我的方式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>
4

1 回答 1

7

你这里有两个问题。首先,这个:

@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 的值并将其设为选定值。但是,我在您的代码中看到这些应该是相同的,所以我猜测命名可能是这里的一个因素。

于 2012-09-29T19:11:08.200 回答