我收到这个错误
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'CategoryList'.
我已经阅读了关于这个问题的所有其他关于 stackoverflow 的帖子,但我无法解决它!它应该可以工作,因为我创建了一个测试 mvc3 项目做完全相同的事情并且没有问题。
这是控制器代码:
public ViewResult EditProduct(Guid id)
{
var product = _repository.Products.FirstOrDefault(x => x.ID == id);
ViewBag.CategoryList = _repository.Categories.Select(x => new SelectListItem { Text = x.Name, Value = x.ID.ToString(), Selected = productToEdit.ID == x.ID }) as IEnumerable<SelectListItem>;
return View(product);
}
[HttpPost]
public ActionResult EditProduct(Product productToEdit)
{
ViewBag.CategoryList = _repository.Categories.Select(x => new SelectListItem { Text = x.Name, Value = x.ID.ToString(), Selected = productToEdit.ID == x.ID }) as IEnumerable<SelectListItem>;
if (ModelState.IsValid)
{
_repository.SaveProduct(productToEdit);
TempData["message"] = string.Format("{0} has been saved", productToEdit.Title);
return RedirectToAction("Product");
}
return View(productToEdit);
}
这是剃须刀代码:
<span class="field">
@Html.DropDownList("CategoryList");
</span>
我也试过:
<span class="field">
@Html.DropDownList("CategoryList", ViewBag.CategoryList as IEnumerable<SelectListItem>);
</span>
附带说明一下,在<span>
内部还有AjaxBeginForm
对模型的其他调用。
我试过在 CategoryList 前面放一个 _0。那也不应该是个问题。我知道我什至不需要第二个参数类型来转换列表,因为我的测试项目不需要它。我知道我不必使用 ViewModel,因为这应该可以工作,MvcMusicStore 显示它可以工作。
为什么它对我不起作用?
感谢您的帮助,我将不胜感激示例代码,以使我更容易理解。
谢谢,