我的一个剃刀视图需要模型类型为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
可以吗?这很常见吗?
答案 0 :(得分:1)
在代码到达浏览器之前,在服务器端解析Razor。使用普通的VB或C#构造(例如Exit Sub
)是完全合法的并且被接受。视图文件不是浏览器将看到的内容;相反,它是服务器用于构造应发送到浏览器的HTML的指令。在其他语言中,这可以称为模板或母版页。最终,使用像Exit Sub
这样的结构很好,因为它在服务器上处理。
然而这里有一个空洞.... Exit Sub
将从处理当前视图文件中退出,导致它在该语句之后永远不会处理任何Razor。它将继续处理其他文件,但应注意确保在页面所需的Exit Sub
调用之后不要留下缺少闭包的悬空HTML元素或其他HTML或JavaScript元素。一般来说,使用Else
而不是Exit Sub
可能是一种更安全的做法。
更好的选择是使用强类型的局部视图,并将RenderPartial()
调用括在if语句中。