【问题标题】:How to create edit view with a dropdownlist如何使用下拉列表创建编辑视图
【发布时间】:2015-08-28 20:41:50
【问题描述】:

我有以下实体:

 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 的定义吗?
  • 你能把查询放到 ViewBag.EntidadList
  • 您收到该错误的原因是 ViewBag.EntidadList 是 null。在Edit() 方法中,您不会将SelectList 分配给ViewBag.EntidadList。您需要按照您的Create() 方法进行操作。

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


【解决方案1】:

您可以使用以下代码。

实际操作方法:

        // 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>

如果您想在编辑视图中使用下拉列表并从数据库中选择项目,您可以使用以下代码:

        // 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>

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    ViewBag.EntidadList 的类型有误,它必须是 IEnumerable&lt;SelectListItem&gt;。我看不出您是如何构建它的,但作为示例,您可以在控制器中像这样构建它:

    var selectListItems = new List<SelectListItem>();
    
    selectListItems.AddRange(
        someList.Select(item => new SelectListItem
        {
            Text = item.Name,
            Value = item.Id.ToString()
        }));
    ViewBag.EntidadList = selectListItems;
    

    【讨论】:

    • 请检查更新,在 Create its like this: ViewBag.EntidadList = new SelectList(db.Entidades, "id", "nombre");
    猜你喜欢
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多