【发布时间】:2014-09-09 10:56:59
【问题描述】:
许多开发人员都这样做:
public void foo() {
if (flag) {
// do stuff
}
}
我更喜欢“早点回来”,所以这样做:
public void foo() {
if (!flag) return;
// do stuff
}
在 ASP.NET-MVC Razor 视图中,中止/跳过/取消视图/部分视图呈现的正确方法是什么?例如如何转换:
@if (flag) {
// do stuff
}
到这样的事情:
@if (!flag) { /* what do I do here to abort/skip/cancel the rendering? */ }
// do stuff
我尝试过使用return 和Request,但我不确定这会如何影响流程。这样做的正确方法是什么?
【问题讨论】:
-
如果使用 "abort" 表示您想根据该标志排除某些内容,那么您无事可做,只需使用
if来分隔这些部分(最终它甚至可能从该行到文件结尾)。很快它就会变得难以理解,因此您可以使用部分视图。如果您需要删除/跳过/取消页面创建(例如重定向到另一个页面或显示完全不同的内容),那么 您在错误的地方进行了检查。在您的控制器中执行此操作,它会选择正确的视图,而视图不会意识到这种逻辑。 -
@AdrianoRepetti 都是真的。但我仍然想这样编码。视图中总会有条件结构,这是不可避免的。渲染并不神奇,Razor 中有一些组件可以读取视图并吐出我们的 HTML——必须有一种方法可以在该过程的早期返回。
-
@hbob 实际上,视图被编译成一个类(我相信当应用程序启动时),然后在渲染管道期间执行类中的一个方法 - 它不起作用与您认为我怀疑的方式完全一样,并希望能解释为什么无法从 Razor 视图中尽早返回...
-
@TrueBlueAussie 不同意。这根本不是指导方针,而是风格问题。 “早退”已成定局。很多开发人员都是这样编码的。我们的确是。避免混乱的条件是一件好事,因为它使您的代码阅读变得容易。如果您认为它使代码难以阅读,那么您的函数可能太长而无法开始。
-
@TrueBlueAussie 对于您向我展示的每一项声称早返不好的“研究”,我会见到您并提出一项“研究”,表明它是好的。就像我说的,这是风格和偏好的问题。此外,这件事只是与问题相切。
标签: asp.net asp.net-mvc razor