如何使用下拉列表创建编辑视图
How to create edit view with a dropdownlist
我有以下实体:
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; }
}
在我的编辑视图中
<div class="form-group">
@Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.Entidad.Id, (SelectList)(ViewBag.EntidadList), "Seleccionar", new { @class = "form-control" })
</div>
</div>
但是我在视图中收到此错误
具有键 'Entidad.Id' 的 ViewData 项目是 'System.Int32' 类型,但必须是 'IEnumerable' 类型。
说明
我的控制器是:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Create()
{
ViewBag.EntidadList = new SelectList(db.Entidades, "id", "nombre");
return View();
}
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Propiedad propiedad = db.Propiedades.Find(id);
if (propiedad == null)
{
return HttpNotFound();
}
return View(propiedad);
}
ViewBag.EntidadList
的类型错误,应该是 IEnumerable<SelectListItem>
。我看不出你是如何构建它的,但作为一个例子,你可以在你的控制器中像这样构建它:
var selectListItems = new List<SelectListItem>();
selectListItems.AddRange(
someList.Select(item => new SelectListItem
{
Text = item.Name,
Value = item.Id.ToString()
}));
ViewBag.EntidadList = selectListItems;
您可以使用以下代码。
动作方法:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Create()
{
ViewBag.EntidadList =
new SelectList(_db.Entidades.ToList().
Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre "); // Viewbag
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(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
</div>
</div>
如果您想在编辑视图中使用下拉列表和 select 来自数据库的项目,您可以使用以下代码:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Propiedad propiedad = db.Propiedades.Find(id);
if (propiedad == null)
{
return HttpNotFound();
}
ViewBag.EntidadList =
new SelectList(_db.Entidades.ToList().
Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre ",you must get id from Entidad and set here ); // Viewbag
return View(propiedad);
}
在编辑页面中:
<div class="form-group">
@Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
</div>
</div>
希望对你有所帮助。
我有以下实体:
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; }
}
在我的编辑视图中
<div class="form-group">
@Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.Entidad.Id, (SelectList)(ViewBag.EntidadList), "Seleccionar", new { @class = "form-control" })
</div>
</div>
但是我在视图中收到此错误
具有键 'Entidad.Id' 的 ViewData 项目是 'System.Int32' 类型,但必须是 'IEnumerable' 类型。 说明
我的控制器是:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Create()
{
ViewBag.EntidadList = new SelectList(db.Entidades, "id", "nombre");
return View();
}
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Propiedad propiedad = db.Propiedades.Find(id);
if (propiedad == null)
{
return HttpNotFound();
}
return View(propiedad);
}
ViewBag.EntidadList
的类型错误,应该是 IEnumerable<SelectListItem>
。我看不出你是如何构建它的,但作为一个例子,你可以在你的控制器中像这样构建它:
var selectListItems = new List<SelectListItem>();
selectListItems.AddRange(
someList.Select(item => new SelectListItem
{
Text = item.Name,
Value = item.Id.ToString()
}));
ViewBag.EntidadList = selectListItems;
您可以使用以下代码。
动作方法:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Create()
{
ViewBag.EntidadList =
new SelectList(_db.Entidades.ToList().
Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre "); // Viewbag
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(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
</div>
</div>
如果您想在编辑视图中使用下拉列表和 select 来自数据库的项目,您可以使用以下代码:
// GET: /GlobalAdmin/Propiedades/Create
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Propiedad propiedad = db.Propiedades.Find(id);
if (propiedad == null)
{
return HttpNotFound();
}
ViewBag.EntidadList =
new SelectList(_db.Entidades.ToList().
Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre ",you must get id from Entidad and set here ); // Viewbag
return View(propiedad);
}
在编辑页面中:
<div class="form-group">
@Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
</div>
</div>
希望对你有所帮助。