MVC 4 DropDownListFor error - 没有类型为'IEnumerable <selectlistitem>'的ViewData项具有键</selectlistitem>

时间:2013-05-07 07:58:29

标签: asp.net-mvc-4

我有一个模特:

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

1 个答案:

答案 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, "")