我有一个模特:
public class Auction
{
public string Title { get; set; }
public string category { get; set; }
}
还有一个控制器:
[HttpGet]
public ActionResult UserForm()
{
var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" });
ViewBag.categoryList = categoryList;
return View();
}
在视图中我有以下几行:
<div class="editor-field">
@Html.DropDownListFor(model =>
model.category,(SelectList)ViewBag.categoryList)
@Html.ValidationMessageFor(model => model.category)
</div>
我尝试保存表单时收到的错误是:
没有类型为'IEnumerable'的ViewData项 有关键'类别'。描述:发生了未处理的异常 在执行当前Web请求期间。请查看 堆栈跟踪以获取有关错误及其位置的更多信息 起源于代码。
异常详细信息:System.InvalidOperationException:没有 具有键的“IEnumerable”类型的ViewData项 '类别'。
我不明白是什么问题,因为我做了(或尝试过)本指南中完成的所有事情: https://www.youtube.com/watch?v=7HM6kDBj0vE
视频也可以在此链接中找到(第6章 - 自动绑定到请求中的数据): http://www.lynda.com/ASPNET-tutorials/ASPNET-MVC-4-Essential-Training/109762-2.html
答案 0 :(得分:11)
我尝试保存表单
时出现错误
这就是你的问题所在。我怀疑你没有在post方法中重建你的列表。 get方法中的以下代码行也应该在post方法中,特别是如果要返回相同的视图,或者在下拉列表中使用ViewBag.categoryList
的视图。
var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" });
ViewBag.categoryList = categoryList;
当您使用带有dropdownlistfor html帮助器的null
对象时,会出现这种错误。如果您执行类似
@Html.DropDownListFor(model => model.PropertyName,null)
// or
@Html.DropDownList("dropdownX", null, "")