我理解一个视图应该只显示内容,并且在显示信息所需的范围之外不做任何逻辑。
在记住这一点时,最好的方法是处理这种简单的场景:
我可以很容易地在视图中执行以下操作:
@if (Model.Children.Count > 0)
{
<p>
You can't delete this!
</p>
}
else
{
using (Html.BeginForm())
{
<p>
Are you really sure you want to delete this?
</p>
<p>
<input type="submit" value="Confirm" /> |
@Html.ActionLink("Cancel", "Index")
</p>
}
}
是否有令人信服的理由制作TWO视图并让控制器返回适当的视图,具体取决于有多少孩子?似乎是对简单性和关注点分离的权衡。
答案 0 :(得分:4)
这是一个非常简单的例子,所以乍一看它似乎无害(如果它保持这种方式肯定是)。但是,请牢记这些因素:
答案 1 :(得分:3)
我会将2个不同视图中的视图分开并让控制器操作根据视图模型值(在本例中为Children.Count)选择正确的视图。但是,据说其他方法也没有错。它适用于这样的简单场景。
答案 2 :(得分:2)
对于这种情况,通常你会有一个Model属性,它实际上是你是否可以删除它的标志(这更符合ViewModel方法),因此视图实际上并没有逻辑,控制器只是告诉视图可用的操作。
@if(Model.CanDelete) {
using (Html.BeginForm())
{
<p>
Are you really sure you want to delete this?
</p>
<p>
<input type="submit" value="Confirm" /> |
@Html.ActionLink("Cancel", "Index")
</p>
}
} else {
<p>You can't delete this!</p>
}
可以使用子数据状态,角色成员资格,业务状态等组合在控制器中填充CanDelete,但是查看所有这些内容都无关紧要