Jim*_*mbo 84 asp.net-mvc ienumerable viewdata selectlist drop-down-menu
在Stack Overflow上有一些关于这个的帖子,但没有一个答案似乎解决了我目前的情况.
我有一个页面,其中包含一个表格,每行有许多文本字段和一个下拉列表.所有下拉列表都需要使用相同的SelectList数据,所以我按如下方式设置:
调节器
ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");
Run Code Online (Sandbox Code Playgroud)
视图
<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>
Run Code Online (Sandbox Code Playgroud)
我在很多地方使用了这个设置,但由于某种原因,在这个特定的视图中,我得到了错误:
没有类型为"IEnumerable"的ViewData项具有键"submarket_0".
Jim*_*mbo 76
好的,所以答案来自其他一些关于这个问题的帖子,它是:
如果你ViewData包含的SelectList名称与你的DropDownListie"submarket_0"相同,那么如果你没有指定第二个参数(在这种情况下是源SelectList),Html帮助器将自动填充你的DropDownList数据.
我的错误发生了什么:
因为包含下拉列表的表是在局部视图中并且ViewData已经更改并且不再包含SelectList我引用的,所以HtmlHelper(而不是抛出错误)试图在ViewData中找到名为"submarket_0"的SelectList(GRRRR! !!)它仍然找不到,然后扔了一个错误:)
如果我错了请纠正我
haw*_*kke 27
老问题,但这是对问题的另一种解释.即使您有强类型视图并且没有使用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;
}
Run Code Online (Sandbox Code Playgroud)
所以如果你有类似的东西:
@Html.DropDownList("MyList", Model.DropDownData, "")
并且Model.DropDownData为null,MVC会查看您的ViewData以查找名称MyList并在ViewData中没有该名称的对象时抛出错误.
Pet*_*eto 15
我有同样的错误,我认为问题是错误文本令人困惑,因为它给出了一个假密钥名称.
在你的情况下它应该说"没有类型'IEnumerable'的ViewData项具有关键字"子市场"".
我的错误是视图代码(您的"子市场")中的拼写错误,但错误文本让我发疯.
我发布这个答案是因为我想说人们正在寻找这个错误,就像我一样,问题是它找不到IENumerable,但是在它应该寻找它的var中(在这种情况下是"子市场"),不在错误显示的那个("submarket_0").
接受的答案非常有趣,但正如你所说的那样,如果你没有指定第二个参数就适用约定,在这种情况下它被指定了,但找不到var(在你的情况下,因为viewdata没有它,在我的情况下,因为我拼错了var的名字)
希望这可以帮助!
小智 8
问题是因为在提交按钮单击时发生回发.因此,在提交点击后再次发送数据时再次返回View()
ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135193 次 |
| 最近记录: |