2012-04-20 105 views
10

Estoy usando MVC. Quiero pasar los datos de categoría que ingresé desde mi vista y pasé a mi Post/Createcontroller, pero no me permite pasar mi categoryTypeID que he seleccionado de mi lista desplegable.DataBinding: 'System.Web.Mvc.SelectListItem' no contiene una propiedad con el nombre 'CategoryTypeID'

Aquí está el error:

DataBinding: 'System.Web.Mvc.SelectListItem' no contiene una propiedad con el nombre 'CategoryTypeID'.

Aquí está mi código:

My CreateController: 
// 
     // POST: /Category/Create 

     [HttpPost] 
     public ActionResult Create(Category category) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Categories.Add(category); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 


      ViewBag.CategoryTypes = new SelectList(db.CategoryTypes, "CategoryTypeID", "Name", category.CategoryTypeID); 

      return View(category); 
     } 
My Create View 
@model Haykal.Models.Category 




<div class="editor-label"> 
      @Html.LabelFor(model => model.CategoryTypeID, "CategoryType") 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownListFor(model => model.CategoryTypeID, 
      new SelectList(ViewBag.CategoryTypes as System.Collections.IEnumerable, "CategoryTypeID", "Name"), 
      "--select Category Type --", new { id = "categoryType" }) 
      @Html.ValidationMessageFor(model => model.CategoryTypeID) 
     </div> 

Respuesta

10

está definiendo su SelectList dos veces, en su controlador, así como, en su opinión.

Mantenga la vista limpia. Justo lo siguiente sería suficiente en su caso: @Html.DropDownListFor(model => model.CategoryTypeID, (SelectList)ViewBag.CategoryTypes)

Tengo que admitir que DropDownListFor es bastante confuso al principio :)

+0

+ 1. De hecho, he definido SelectList dos veces. Tu explicación resolvió absolutamente mi problema. Ahora, ¿por qué el mensaje de error en realidad no dice eso? Tengo un error similar: DataBinding: 'System.Web.Mvc.SelectListItem' no contiene una propiedad con el nombre 'Id'. El mensaje de error es un poco engañoso, ¿no crees? – AuroMetal

21

me enfrentaba a este error. Estaba enlazar un objeto del Modelo Vista:

editPanelViewModel.Panel = new SelectList(panels, "PanelId", "PanelName"); 

En la vista, creé el cuadro de lista como esta:

@Html.ListBoxFor(m => m.Panel, new SelectList(Model.Panel, "PanelId", "PanelName")) 

Debe ser así, de hecho:

@Html.ListBoxFor(m => m.Panel, new SelectList(Model.Panel, "Value", "Text")) 
Cuestiones relacionadas