我必须参加并尝试他们的小组,但我无法让它工作。
当我运行它时,我得到以下错误,我认为这是因为我尝试将GroupBy解析为ToDictionary(),请参阅控制器方法。但在视图中它使用IEnumerable。在某种程度上,我需要将Dictionary解析为视图。但我不知道怎么做。
你有什么想法我怎样才能解决这个问题?
传递到字典中的模型项是以下类型:
System.Collections.Generic.List
1 [System.Collections.Generic.KeyValuePair2[System.String,System.Int32]]
但是这个字典需要一个类型为
的模型项
System.Collections.Generic.IEnumerable
1 [aProejct.Models.Database.Properties]`。
这里我有我的Controller方法:
public ActionResult Test()
{
var group = db.Propertiess.AsNoTracking().GroupBy(x => x.PropertiesName).ToDictionary(g => g.Key, g => g.Count());
return View(group.ToList());
}
我的观点
model IEnumerable<aProject.Models.Database.Properties>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Test</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<ul>
@foreach (var group in Model.GroupBy(item => item.PropertiesName)) {
<li>
@Html.Encode(group.Key)
<ul>
@foreach (var item in group)
{
<li>
@Html.Encode(item.SubPropertiess)
</li>
}
</ul>
</li>
}
</ul>
</body>
</html>
答案 0 :(得分:0)
在您的控制器中,您正在执行.ToDictionary(g => g.Key, g => g.Count());
,它返回KeyValue字典,其中Key为PropertiesName
,Value是与该组匹配的条目数。
我真的不认为这是你想要的。您实际上并没有以任何方式将这些组中的项目传递给视图。
g
实际上是包含您的属性的可枚举,因此您还需要确保将其传递给视图以便迭代它们。
编辑:从您的代码中看起来 - 您还没有真正使用Count
。尝试将g
(包含组中的项目)作为值传递,而不是执行Count()
。然后,您应该可以在视图中为模型使用List<string, IEnumerable<Property>>
之类的内容。
如果您以后确实需要计数,则可以在视图中对值进行计数。
但我建议您为视图创建一个真正的viewmodel类,控制器可以设置视图可能需要的所有内容,以使您的视图尽可能简单。