2015-06-12 68 views
0

我有以下實體:如何創建編輯視圖具有下拉列表

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> 

但是我上查看此錯誤

的ViewData的具有鍵'Entidad.Id'的項目類型爲'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); 
     } 
+0

你能顯示ViewBag.EntidadList的定義嗎? – DanielVorph

+0

你可以把查詢ViewBag.EntidadList – DarkVision

+0

檢查更新請 –

回答

2

您可以使用下面的代碼。

在操作方法:

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

我希望這對你有所幫助。

1

你打錯類型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; 
+0

請檢查更新,創建它像這樣:ViewBag.EntidadList = new SelectList(db.Entidades,「id」,「nombre」); –

相關問題