DropDownList不会从Model设置Selected Value

时间:2014-11-27 16:47:53

标签: .net model-binding html.dropdownlistfor

我正在尝试制作表单的编辑部分。我传递给视图的对象是正确的。我通过这个函数传递它:

 public ActionResult Edit(int? id)
    {

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Progetto Progetti = db.Progetti.Find(id);
        if (Progetti == null)
        {
            return HttpNotFound();
        }

//这里我初始化了两个列表。 (一个从Utenti获得数据,另一个从Ruoli获取数据。)

ViewBag.Utenti = new SelectList(db.Utenti.toList(),"IDUTENTE","USERNAME");
        ViewBag.Ruoli = new SelectList(db.Ruoli.ToList(), "id_ruolo", "desc_ruolo");
        return View("index", Progetti); //the object Progetti comes OK
    }

在我看来,我有这个:

@for (int i = 0; i < Model.Count; i++)
  {
        var item = Model.ElementAt(i);
        var index = "rp" + i;
        <input type="hidden" name="progetto.ruoloprogetto[@index].id_ruolo_prog" value="@item.id_ruolo_prog" />
        <tr class="@i" id="@item.id_ruolo_prog">
            <td>
                <input type="hidden" name="progetto.ruoloprogetto.Index" value="@index" />

                @Html.DropDownListFor(p=> item.id_utente, ViewBag.Utenti as SelectList,
                new
            {
                @Class = "form-control",
                @Name = "progetto.ruoloprogetto[" + index + "].id_utente",
                @Id = "progetto.ruoloprogetto[" + index + "]_id_utente"
            })


            </td>
            <td>
                @Html.DropDownListFor(p => item.id_ruolo, ViewBag.Ruoli as SelectList,
            new
            {
                @Class = "form-control",
                @Name = "progetto.ruoloprogetto[" + index + "].id_ruolo",
                @Id = "progetto.ruoloprogetto[" + index + "]_id_ruolo"
            })

            </td>

但下拉列表会获取所有列表值,并且不会将所选值设置为item.id_utente,这是我希望它拥有的值

有人可以帮忙解决这个问题吗?

提前完成

1 个答案:

答案 0 :(得分:0)

尝试使用这种方式,

@Html.DropdownListFor(x => x[i].id_ruolo, ViewBag.Ruoli as SelectList,
           new {
                   @Class = "form-control"
               });