Asp.net mvc 4 是';退出Sub&x27;从剃刀的角度来看,这是一个问题?

Asp.net mvc 4 是';退出Sub&x27;从剃刀的角度来看,这是一个问题?,asp.net-mvc-4,razor-2,Asp.net Mvc 4,Razor 2,我的一个razor视图要求模型类型为IEnumerable(of Object) 我想检查此集合是否为空,如果为空,则不执行任何操作 一种方法是将我的视图代码包装在If中 @If Model.Count > 0 Then ' Lengthy HTML + Razor Code End If 但是我觉得这很难看,所以我试着退出子(C#返回) @如果Model.Count=0,则 @ 列表为空 出口接头 如果结束 '冗长的HTML+Razor代码 这是可行的,并且似乎达到了相同的结

我的一个razor视图要求模型类型为
IEnumerable(of Object)

我想检查此集合是否为空,如果为空,则不执行任何操作

一种方法是将我的视图代码包装在
If

@If Model.Count > 0 Then
    ' Lengthy HTML + Razor Code
End If
但是我觉得这很难看,所以我试着退出
(C#
返回

@如果Model.Count=0,则
@ 列表为空

出口接头 如果结束 '冗长的HTML+Razor代码
这是可行的,并且似乎达到了相同的结果,但是代码并没有被难看的
If
语句所包装

我对视图是如何呈现的理解是有限的,但我有点惊讶于它的工作原理。退出潜艇会不会以某种方式中断进程


这种风格有内在的危险吗?是否可以从视图退出Sub?它是否常见?

在代码到达浏览器之前,Razor在服务器端被解析。使用正常的VB或C结构(如
Exit Sub
)是完全合法的,也是可以接受的。视图文件不是浏览器将看到的内容;相反,它是服务器用来构造应发送到浏览器的HTML的指令。在其他语言中,这可能被称为模板或母版页。最终,使用像
Exit Sub
这样的构造是可以的,因为它是在服务器上处理的

然而这里有一个漏洞
Exit Sub
将从处理当前视图文件中退出,使其在该语句之后永远不会处理任何文件。它将继续处理其他文件,但应注意确保在调用
Exit Sub
后,不会留下缺少闭包的悬空HTML元素,或其他HTML或JavaScript元素,这是页面所必需的。一般来说,使用
Else
而不是
Exit Sub
可能是更安全的做法

更好的选择是使用强类型局部视图,并在if语句中包含
RenderPartial()
调用

@If Model.Count = 0 Then
    @<p>List is empty.</p>
    Exit Sub
End If

' Lengthy HTML + Razor Code