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

ここには2つの問題があります。まず、これ:

@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 に答える