在ASP.NET MVC中,视图中的IF..ELSE语句是否令人不悦?

时间:2011-04-22 11:28:07

标签: c# .net asp.net asp.net-mvc

我知道您希望将逻辑排除在观点之外。我可以通过使用DisplayFor / EditorFor并将IEnumerables传递给视图来消除大多数循环。

IF语句怎么样?应该完全避免他们的意见吗?谨慎使用?作为最后的手段?

假设您想要显示基于用户角色隐藏元素...如果没有IF语句,您将如何做到这一点......或许是一个完全独立的视图?

试图了解最佳做法。

谢谢!

7 个答案:

答案 0 :(得分:14)

保持一致,并牢记视图的目的 - 生成HTML。为此,当然你需要一些if构造。我想有些人建议你坚持使用一些天真的,超挑剔的纯粹主义,而牺牲可用,功能齐全,定义明确的代码。

答案 1 :(得分:10)

在您的视图中使用if没有任何问题,只要您最终不会在其中添加后端逻辑。

答案 2 :(得分:3)

Rob Conery有一条经验法则,指出"if there's and IF, make a helper"。就个人而言,我会说“谨慎使用”。我尽可能地避免它,因为它使单元测试更加困难。

对于您想要根据用户角色隐藏元素的情况:对于简单的场景,我可能会将检查直接放在视图中。不过,通常我会尝试使这些更简洁和可测试。所以而不是:

@if (HttpContext.Current.User.IsInRole("admin")
{
    // Show admin stuff
}

我会做类似的事情:

@if (Model.UserIsAdmin)
{
    // Show admin stuff
}

另一方面,如果这些检查开始在你的视图中开始出现斑点,我可能首先在viewmodel中有条件地创建元素,然后只显示已构建的内容。希望有所帮助。

答案 3 :(得分:0)

基本上每个View都应显示ViewModel中传递的内容。如果ViewModel还不够,那么我会寻找一种改进ViewModel创建本身的方法,而不是View的逻辑。

可以在创建ViewModel时评估所有条件。

当然,这完全取决于您的项目组织容忍View中的自定义逻辑。

答案 4 :(得分:0)

在我看来,如果/ else可以谨慎使用,但是对于你提到的例子,隐藏一个基于角色的元素 - if check绝对不应该在视图中。在需要的地方写下扩展和帮助。

答案 5 :(得分:0)

我认为最好避免在视图中,你应该避免视图中的业务(模型)或应用程序(Controller)逻辑 在您的示例中,您可以创建不同的部分视图以供显示,一些认为取决于用户角色,并在Controller中为您需要显示的视图设置逻辑

答案 6 :(得分:0)

我建议在视图中用“if”隐藏元素,但在代码中你必须禁用由隐藏元素激活的函数(方法)。