7

我有一个模型:

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

4

2 回答 2

14

当我尝试保存表单时出现的错误

这就是你的问题所在。我怀疑你没有在你的 post 方法中重建你的列表。您在 get 方法中拥有的以下代码行也应该在您的 post 方法中,尤其是当您返回相同的视图或ViewBag.categoryList在下拉列表中使用的视图时。

var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" });
ViewBag.categoryList = categoryList;

null当您使用带有 html 帮助器的下拉列表的对象时,您会遇到这种错误。如果您执行类似的操作,则可以轻松重现该错误

@Html.DropDownListFor(model => model.PropertyName,null)
// or
@Html.DropDownList("dropdownX", null, "")
于 2013-05-07T08:06:15.827 回答
-1

我有同样的问题,我想当你要从同一个控制器中的同一个表数据创建 ViewData 具有不同的名称时,它会产生这样的错误,我只是将旧的 ViewData 从旧函数(方法)复制到新函数(方法) 在同一个控制器中,这对我有用。

于 2015-05-03T04:02:33.573 回答