MVC4 SelectList not selected default object

2019-07-18 23:46发布

My select list isn't selecting the default object being brought in through code.

I first create my SelectList like so:

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

My objSelected gets filled with a Guid that's associated with the PeriodID.

Inside my controller I define my viewbag variable to the new select list.

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

Then in my View here's how I'm displaying my 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>

1条回答
叼着烟拽天下
2楼-- · 2019-07-19 00:09

You have two problems here. First, this:

@Html.DropDownListFor(model => model.PeriodID, ViewBag.PeriodID as SelectList, 
      String.Empty, new { @class = "span3" })

Change ViewBag.PeriodID to ViewBag.Periods or ViewBag.PeriodList. This is confusing, and there are a number of situations in which MVC will get confused if you use the same named object. It's just best to make sure everything is named differently.

Second, The SelectList class ignores the selecteditem member of the SelectListItem. It's not used at all. DropDownListFor will take the value of model.PeriodID and make it the selected value. However, I see in your code that those should be the same so I'm guessing the naming may be a factor here.

查看更多
登录 后发表回答