【问题标题】:One line If statement with Razor and .NET带有 Razor 和 .NET 的一行 If 语句
【发布时间】:2013-08-20 18:00:09
【问题描述】:

Razor 似乎不喜欢我的一行 If 语句...通常在 VB.NET 中,我可以像这样编写一行 If 语句:

If True Then Dim x As Integer

但是,当我在这样的 .vbhtml 文件中对 Razor 执行相同操作时...

@If True Then Dim x As Integer

我得到了错误

“If”块未终止。所有“If”语句都必须以匹配的“End If”结束

什么给了?为什么 Razor 不接受这个?我意识到一个简单的解决方案是只使用像

这样的代码块
@code
    If True Then Dim x As Integer
End Code

但这不是我要找的。我很好奇为什么 Razor 无法识别仅使用 @If... 的 VB.Net 一行 If 语句。有什么想法吗?

【问题讨论】:

  • 您是否尝试过将 Razor 代码封装在 () 中?
  • @user1477388 也没有运气。
  • @ElliotSchmelliot 将您的 Razor 代码附在 @{....}
  • Razor 不允许使用单行 if 语句的“速记”。无论有多少语句,您都必须分隔块。
  • 为什么不写Dim x As Integer = (If(true, 1, 0))之类的东西

标签: asp.net-mvc vb.net razor if-statement


【解决方案1】:

在 VB.Net 中,您可以像这样执行内联 If 语句:

@(If(boolCondition, "truePart", "falsePart"))

【讨论】:

  • 这才是真正的解决方案
  • 这是一个三元 If 表达式,而不是 If 语句。如果您想有条件地调用不返回值的帮助程序或扩展方法怎么办?
【解决方案2】:

与 C# 相同的问题,正如 here 解释的那样:

Razor 使用代码语法推断缩进:Razor Parser infers code 通过阅读开始和结束字符或 HTML 结束 元素。因此,开头“{”和结尾“}”的使用是 强制性的,即使是单行指令

你做正确的事

@code
    If True Then Dim x As Integer
End Code

你可以那样做,但不是你喜欢的(内联)

@If (True) Then
    Dim x As Integer
End If

【讨论】:

  • 感谢您的链接,这正是我想要的。
  • 没问题,祝你有美好的一天:-)
【解决方案3】:

我不确定 VB,但这适用于 C#。

@{if (true) { int x; }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2012-11-28
    • 1970-01-01
    相关资源
    最近更新 更多