0

我的一个剃刀视图需要一个模型类型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 这很常见吗?

4

1 回答 1

1

Razor 在代码到达浏览器之前在服务器端进行解析。使用普通的 VB 或 C# 结构(例如Exit Sub. 视图文件实际上并不是浏览器将看到的。相反,它是服务器用来构造应该发送到浏览器的 HTML 的指令。在其他语言中,这可能被称为模板或母版页。最终,使用类似的构造Exit Sub很好,因为它是在服务器上处理的。

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

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

于 2013-09-11T05:32:03.000 回答