在Stack溢出上有几篇关于这个问题的帖子,但是没有一个能解决我当前情况下的问题。
我有一个带有表格的页面,每一行都有许多文本字段和一个下拉列表。所有下拉列表都需要使用相同的SelectList数据,因此我已经将其设置为:
控制器
ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");视图
<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>我在很多地方都使用过这种设置,但是由于某些原因,在这个特定的视图中,我得到了错误:
没有一个“IEnumerable”类型的ViewData项目具有‘submarket_0’键。
发布于 2010-05-17 14:08:18
好的,答案是从其他关于这个问题的帖子中得到的,它是:
如果您的ViewData包含与您的DropDownList同名的SelectList,即"submarket_0",则如果您不指定第二个参数(在本例中是源SelectList ),则helper将自动使用该数据填充DropDownList。
我的错误是:
由于包含下拉列表的表处于部分视图中,并且ViewData已被更改,并且不再包含我引用的SelectList,因此HtmlHelper (而不是抛出错误)试图在ViewData (GRRRR!)中找到名为"submarket_0“的SelectList。它仍然找不到,然后对此抛出一个错误:)
如果我错了,请纠正我
发布于 2013-10-11 20:10:14
老问题,但这是对这个问题的另一个解释。即使您有强类型的视图,并且没有使用ViewData创建下拉列表,您也会得到这个错误。当您查看MVC源时,错误的原因会变得很清楚。
// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
selectList = htmlHelper.GetSelectData(name);
usedViewData = true;
}所以如果你有这样的东西:
@Html.DropDownList("MyList", Model.DropDownData, "")
Model.DropDownData为null,MVC在ViewData中查找名为MyList的内容,如果ViewData中没有该名称的对象,则抛出一个错误。
发布于 2011-10-28 07:38:59
我也犯了同样的错误,我认为问题是错误文本混淆了,因为它给出了一个错误的密钥名。
在你的例子中,它应该说“没有‘ViewData’类型的'IEnumerable‘项目有关键的”子市场“”。
我的错误是视图代码(你的“子市场”)拼写错误,但是错误文本让我发疯了。
我发布这个答案是因为我想说,像我一样,寻找这个错误的人,问题是找不到IENumerable,而是在它应该查找的变量(这里是“子市场”)中,而不是在错误显示("submarket_0")中。
接受的答案非常有趣,但是正如您所说的,如果您没有指定第二个参数,则应用约定,在本例中它是指定的,但是没有找到var (在您的例子中,是因为viewdata没有它,在我的例子中是因为我拼错了var名称)。
希望这能有所帮助!
https://stackoverflow.com/questions/2849341
复制相似问题