我有一个我写的代码,如下所示:
ViewBag.Items = user.Items.GroupBy(x => x.ItemId).Select(pr => new
{
ItemId = pr.Key,
ImageURL = pr.Select(x=>x.ImageURL).FirstOrDefault(),
Title = pr.Select(x=>x.Title).FirstOrDefault(),
Sales = pr.Select(x=>x.Transactions.Sum(y=>y.QuantitySold))
}).ToList();
你可以看到它是一个匿名对象列表......我现在要做的是将这些值绑定到我已经存在的视图中,如下所示:
<tbody>
@if (ViewBag.Items != null)
{
foreach (var item in ViewBag.Items)
{
<tr>
<td><img src="@item.ImageURL" /></td>
<td>@item.Title</td>
<td>@item.Sales</td>
</tr>
}
}
</tbody>
但是我收到了这个错误:
Additional information: 'object' does not contain a definition for 'ImageURL'
还有其他属性......
我如何解决这个问题,但同时避免创建额外的类,这会使视图强烈输入类型。有人可以帮助我吗?
答案 0 :(得分:3)
因为public class ViewModel
{
public int ItemId {get;set;}
...
...
...
}
是动态类型并使用它我们失去了comiple时间安全性和智能感知,你可以创建一个ViewModel并使用它:
var model = user.Items.GroupBy(x => x.ItemId).Select(pr => new
ViewModel {
ItemId = pr.Key,
ImageURL = pr.Select(x=>x.ImageURL).FirstOrDefault(),
Title = pr.Select(x=>x.Title).FirstOrDefault(),
Sales = pr.Select(x=>x.Transactions.Sum(y=>y.QuantitySold))
}).ToList();
return View(model);
然后在该viewmodel上投影:
@model List<YourNamespace.ViewModels.ViewModel>
@if (@Model!= null)
{
foreach (var item in @Model)
{
<tr>
<td><img src="@item.ImageURL" /></td>
<td>@item.Title</td>
<td>@item.Sales</td>
</tr>
}
}
现在在您的视图中将您的视图绑定到该模型,如:
github
答案 1 :(得分:0)
将其投射到目标类型
{{1}}