2012-04-20 2 views
10

Sto utilizzando MVC. Voglio passare i dati della categoria che ho inserito dalla mia vista e passato al mio post/Createcontroller, ma non mi sta permettendo di passare il mio categoryTypeID che ho selezionato dalla mia lista a discesa.DataBinding: 'System.Web.Mvc.SelectListItem' non contiene una proprietà con il nome 'CategoryTypeID'

Ecco l'errore:

DataBinding: 'System.Web.Mvc.SelectListItem' non contiene una proprietà con il nome di 'CategoryTypeID'.

Ecco il mio codice:

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> 

risposta

10

si sta definendo il vostro SelectList due volte, nel controller così come nella vista.

Mantenere la vista pulita. Proprio il seguente sarebbe sufficiente nel tuo caso: @Html.DropDownListFor(model => model.CategoryTypeID, (SelectList)ViewBag.CategoryTypes)

devo ammettere che DropDownListFor è piuttosto confusa all'inizio :)

+0

+ 1. In effetti, ho definito SelectList due volte. La tua spiegazione ha assolutamente risolto il mio problema. Ora, perché il messaggio di errore in realtà non lo dice? Ho un errore simile: DataBinding: 'System.Web.Mvc.SelectListItem' non contiene una proprietà con il nome 'Id'. Il messaggio di errore è di qualche tipo fuorviante, non credi? – AuroMetal

21

ho affrontato questo errore. Mi era vincolante un oggetto del Modello Vista:

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

nella vista, ho creato il ListBox in questo modo:

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

dovrebbe essere in questo modo, infatti:

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