I am using MVC. I want to pass the category data I entered from my view and passed to my Post/ Createcontroller, but it's not's letting me pass my categoryTypeID that I have selected from my dropdownlist.
Here is the error:
DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a property with the name 'CategoryTypeID'.
Here is my code:
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>
I faced this error. I was binding an object of the View Model:
editPanelViewModel.Panel = new SelectList(panels, "PanelId", "PanelName");
In the View, I created the ListBox like this:
@Html.ListBoxFor(m => m.Panel, new SelectList(Model.Panel, "PanelId", "PanelName"))
It should be like this in fact:
@Html.ListBoxFor(m => m.Panel, new SelectList(Model.Panel, "Value", "Text"))
You are defining your SelectList
twice, in your controller as well as in your view.
Keep the view clean. Just the following would be enough in your case:
@Html.DropDownListFor(model => model.CategoryTypeID, (SelectList)ViewBag.CategoryTypes)
I have to admit that DropDownListFor is quite confusing in the beginning :)
来源:https://stackoverflow.com/questions/10252716/databinding-system-web-mvc-selectlistitem-does-not-contain-a-property-with-th