正确的MVC方式在视图中显示“无项目”消息

时间:2011-09-23 18:34:21

标签: asp.net-mvc

我的控制器会将一个项目列表返回给我的视图。当没有要显示消息的项目时,我需要处理这个案例,“没有项目。”

我可以:

  1. 从我的控制器检查list.Count并返回仅包含该消息的视图,或
  2. 从视图本身检查list.Count,并相应地显示消息或项目。
  3. 我读到视图不应该有任何逻辑,所以纯MVC方式将是#1。我错了,还是被MVC接受了?非常感谢。

4 个答案:

答案 0 :(得分:15)

这是一种观点的责任。检查模型上的计数并采取相应措施:

@model IEnumerable<MyViewModel>

@if (Model.Count() > 0)
{
    ...
} 
else
{
    <div>Nothing to display here</div>
}

如果您使用的是一些Grid助手,例如MVCContrib Grid,您甚至不需要在视图中使用if

@model IEnumerable<MyViewModel>
@Html.Grid(Model)
     .Empty("Nothing to display here")
     .Columns(column =>
     {
         ...
     })
)

答案 1 :(得分:3)

有些人可能不同意,但我认为从视图中删除所有逻辑是不现实的。那是......只要我们谈论视角逻辑。

如果你设置了一条消息,你仍然需要执行一些逻辑来显示该消息,特别是如果你想放弃任何标题,否则你将设置一个空输出。

我建议最重要的是要如何做到这一点......但是这样做对你有意义。只是尽量将逻辑限制在显示数据所需的范围内。

答案 2 :(得分:1)

视图可以包含视图逻辑,但没有业务逻辑。所以你的选项#2应该没问题。

答案 3 :(得分:1)

嗯,你是对的。您的视图不应该有任何逻辑,但您的控制器可以.Howerver简单的条件检查和循环是完全正常的。我个人会检查控制器级别的计数,然后将结果放入viewbag或其他东西。然后我会检查视图中的视图包。