从剃刀中看出的“退出子”是一个问题吗?

时间:2013-09-11 05:08:45

标签: asp.net-mvc-4 razor-2

我的一个剃刀视图需要模型类型为IEnumerable(Of Object)

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

执行此操作的一种方法是将我的视图代码包装在If

@If Model.Count > 0 Then
    ' Lengthy HTML + Razor Code
End If

但我觉得这很难看,所以我尝试退出Sub(C#return)。

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

' Lengthy HTML + Razor Code

这有效并且似乎达到了相同的结果,但代码并没有包含在丑陋的If语句中。

我对视图呈现方式的理解是有限的,但我对此有用感到惊讶。不会退出Sub会以某种方式中断该过程吗?

这种风格有固有的危险吗?从视图中 Exit Sub 可以吗?这很常见吗?

1 个答案:

答案 0 :(得分:1)

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

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

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