C# 在ASP.NET MVC中,视图中的IF..ELSE语句是否不受欢迎?

C# 在ASP.NET MVC中,视图中的IF..ELSE语句是否不受欢迎?,c#,.net,asp.net,asp.net-mvc,C#,.net,Asp.net,Asp.net Mvc,我知道你想把逻辑排除在你的观点之外。通过使用DisplayFor/EditorFor并将IEnumerables传递给视图,我可以消除大多数循环 如果语句呢?是否应该在视图中完全避免它们?少用?作为最后手段 假设你想显示隐藏一个基于用户角色的元素…如果没有IF语句,你会怎么做…也许是一个完全独立的视图 只是想了解一下最佳实践 谢谢 基本上每个视图都应该显示ViewModel中传递的内容。如果ViewModel还不够,那么我将寻找一种改进ViewModel创建本身的方法,而不是视图的逻辑 可以在创

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

如果语句呢?是否应该在视图中完全避免它们?少用?作为最后手段

假设你想显示隐藏一个基于用户角色的元素…如果没有IF语句,你会怎么做…也许是一个完全独立的视图

只是想了解一下最佳实践


谢谢

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

可以在创建ViewModel时计算所有条件


当然,这完全取决于您的项目组织在视图中容忍了多少自定义逻辑。

在我看来,If/else可以少用,但对于您提到的示例,隐藏基于角色的元素-If检查绝对不应该出现在视图中。在需要的地方编写扩展和帮助程序。

我认为最好避免视图中的业务(模型)或应用程序(控制器)逻辑
在您的示例中,您可以为显示创建不同的局部视图,一些想法取决于用户角色,并在控制器中为您需要显示的视图放置逻辑。如果在视图中使用
,只要您不在视图中放置后端逻辑,则使用
没有任何问题。

,请记住视图的目的——生成HTML。为此,您当然需要一些
if
结构。我想有些人建议你坚持一些空中楼阁的、极端挑剔的纯粹主义,而牺牲了可用的、功能性的、定义良好的代码。

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

Rob Connery有一条经验法则指出。就我个人而言,我会说“节约使用”。我尽量避免使用它,因为它使单元测试变得更加困难

对于希望根据用户角色隐藏元素的情况:对于简单的场景,我可能会直接在视图中进行检查。不过,通常我还是会尽量让这些更简洁、更易测试。因此,不是:

@if (HttpContext.Current.User.IsInRole("admin")
{
    // Show admin stuff
}
我会这样做:

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

另一方面,如果这些类型的检查开始遍布视图,我可能会先在viewmodel中有条件地创建元素,然后只显示构建的内容。希望能有帮助。

顺便说一句,我想说的是,if必须简单化:if(model.isbuttonovisible)//show button。实际上,我会问相反的问题。为什么我不在我的观点中加入一个if语句呢?有时显示的内容取决于模型的状态。@Serge-haha。。。谢谢:)@mcl-我同意。这是一个罕见的视图,除了局部视图或非常简单的视图外,它不需要根据模型的某些条件来决定生成什么HTML。下面一些人的建议实际上打破了关注点分离的概念:它专门要求模型或控制器处理如何显示事物。