我有以下实体:
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,但仍然是相同的。
答案 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" })
注意:
EntidadList
已经是SelectList
- 无需创建
一个新的。SelectList
构造函数中的最后一个参数(您的集合所在的位置)
它不需要"0"
)并被忽略。选项是
视图中选择的内容基于Entidad.Id
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”,“属性”,可选的选定值)