如果在通话中有任何未经验证的互动,我想转到我的“观看”。
就像电子邮件一样,如果您在一组电子邮件中有未读电子邮件,则会以粗体显示。我正在做那样的事。
我有一个存储库,所以我这样做......
foreach(item in callRepo.All())
{
if (item.Interactions.Count(x=>x.Unread==true)>0)
{
}
}
return View(callRepo.All());
一个电话有很多交互,如果有任何未读的交互,我想转到我的视图。
这就是我现在正在查看的方式:
var CSSclass =“Readed”
foreach(item in callRepo.All())
{
if (item.Interactions.Count(x=>x.Unread==true)>0){CSSclass="Unreaded"}
<tr class=@CSSclass>}
我不想在我的视图上处理此业务。
有没有办法在我的控制器上执行此操作?
我的问题清楚了吗?抱歉英语不好.Tks
答案 0 :(得分:0)
你打算多少次调用这个存储库方法(到目前为止我已经计算了3个)?
我建议您使用视图模型:
public class MyViewModel
{
public bool IsRead { get; set; }
public IEnumerable<Interaction> Interactions { get; set; }
}
然后在你的控制器中:
public ActionResult Index()
{
var items = callRepo.All();
var model = items.Select(item => new MyViewModel
{
Interactions = item.Interactions,
IsRead = item.Interactions.Any(x => x.Unread == true)
});
return View(model);
}
和您的观点:
@model IEnumerable<MyViewModel>
<table>
@Html.DisplayForModel()
</table>
并在相应的显示模板(~/Views/Shared/DisplayTemplates/MyViewModel.cshtml
)中:
@model MyViewModel
@{
var css = model.IsRead ? "read" : "unread";
}
<tr class="@css">
...
</tr>
此代码的进一步改进是用特定的IEnumerable<Interaction>
替换视图模型中的IEnumerable<InteractionViewModel>
属性,并使用AutoMapper来外化模型和视图模型之间的映射