I followed the instruction in this post, but when I try to add a product I get this error:
Server Error in '/' Application.
--------------------------------------------------------------------------------
Value cannot be null.
Parameter name: source
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: source
Source Error:
Line 63: </div>
Line 64: <div class="editor-field">
Line 65: @Html.DropDownListFor(model => model.CategoryId, ((IEnumerable<GAM.Models.Category>)ViewBag.PossibleCategories).Select(option => new SelectListItem {
Line 66: Text = (option == null ? "None" : option.Name),
Line 67: Value = option.Id.ToString(),
The controller code is:
public ActionResult Create()
{
ViewBag.PossibleCategory = context.Categories;
return View();
}
//
// POST: /Product/Create
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
context.Products.Add(product);
context.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.PossibleCategory = context.Categories;
return View(product);
}
And the code of the view is:
@Html.DropDownListFor(model => model.CategoryId, ((IEnumerable<GAM.Models.Category>)ViewBag.PossibleCategories).Select(option => new SelectListItem {
Text = (option == null ? "None" : option.Name),
Value = option.Id.ToString(),
Selected = (Model != null) && (option.Id == Model.CategoryId)
}), "Choose...")
@Html.ValidationMessageFor(model => model.CategoryId)
Your problem is the following:
You assign this property within the
Controller:Then, in your
Viewyou try to read this dynamicViewBagproperty:Can you see the error? You’re giving different names… You do not get compile time checking because
ViewBaguses the new C# 4dynamictype.ViewBag.PossibleCategorieswill only be resolved at runtime. As there’s noViewBagproperty that matchesViewBag.PossibleCategoriesyou get this error:Value cannot be null. Parameter name: sourceTo solve this just do this: