'System.Web.Mvc.SelectListItem'不包含名为'id'#2的属性

时间:2015-06-11 22:45:07

标签: c# asp.net asp.net-mvc entity-framework razor

我有以下实体:

public class Entidad
{
    [Key]
    public int Id { get; set; }
    public string Nombre { get; set; }

    public virtual ICollection<Propiedad> Propiedades { get; set; }
}

public class Propiedad
{
    [Key]
    public int Id { get; set; }

    public virtual Entidad Entidad { get; set; }

    public string Codigo { get; set; }
    public string Nombre { get; set; }
    public string TipoDeDatos { get; set; }
}

我有这个控制器动作

public ActionResult Create()
{
    ViewBag.Entidad = new SelectList(db.Entidades);
    return View();
}

并且在我看来:

<div class="form-group">
    @Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.Entidad.Id, new SelectList(ViewBag.Entidad, "id", "nombre", 0), "Seleccionar", new { @class = "form-control" })
    </div>
</div>

但是我收到此错误: DataBinding:'System.Web.Mvc.SelectListItem'不包含名为'id'的属性。

我也尝试使用Camel Case Id,但仍然是相同的。

2 个答案:

答案 0 :(得分:7)

首先,您需要更改ViewBag属性的名称,使其不与您的模型属性(说EntidadList)冲突,然后在SelectList构造函数中指定属性用作值和文本字段

ViewBag.EntidadList = new SelectList(db.Entidades, "id", "nombre");

然后在视图中使用

@Html.DropDownListFor(m => m.Entidad.Id, (SelectList)ViewBag.EntidadList, "Seleccionar", new { @class = "form-control" })

注意:

  1. EntidadList已经是SelectList - 无需创建 一个新的。
  2. SelectList构造函数中的最后一个参数(您的集合所在的位置) 它不需要"0")并被忽略。选项是 视图中选择的内容基于Entidad.Id
  3. 的值
  4. 您当前使用的ViewBag.Entidad = new SelectList(db.Entidades);,其中您未设置值和文字 fields表示创建SelectListItems,其值为 System.Web.MVC.SelectListItem>(a string)没有 名为id的属性,因此在您尝试时视图中出现错误 从中创建一个新的SelectList

答案 1 :(得分:0)

晚回复,对不起。在控制器中将ViewBag.List声明为List <>。然后使用它在新的SelectList视图中创建选择列表(Viewbag.List,“ ID”,“属性”,可选的选定值)