【问题标题】:How to write if equivalent of ternary expression in razor?如果等价于剃刀中的三元表达式,如何写?
【发布时间】:2020-12-16 11:42:07
【问题描述】:

目前我在帖子之后使用了三元表达式:Razor If/Else conditional operator syntax 它工作正常,但由于在我的情况下表达式值很长,我想以更清晰的方式编写它们,也许在途中使用临时变量。

我知道if是一个语句,不是表达式,但是怎么写呢?结果应该只是字符串(用于在页面上显示)。

所以从:

@(condition ? string1 : string2)

它的if 对应物会是什么样子?

我搜索并尝试编写 ifs 和 lambda,但每次我都遇到一些语法错误。我想保留返回字符串值的这种简单性,而不是在每个放置值的分支中执行,例如@Html.DisplayFor

更新

我的string 值是纯文本,没有 html 标记,或者一些花哨的东西。实际代码只是(为此目的有点过于复杂,但我希望可读):

@(summary.Any() ? String.Join(", ", summary.Select(it => it.Key.ToString())) : "none")

【问题讨论】:

  • 声明一个字符串。然后编写 if 并在 if 内部,为字符串分配正确的值。然后在最后,输出它。标准 C#,足够接近。请告诉我们您尝试了什么以及遇到了什么错误。

标签: c# asp.net-core razor


【解决方案1】:

我猜你只需要几个换行符

@if (someBoolean == true)
{
    <div>
        Boolean is true
    </div>
}
else
{
    <div>
        Boolean is false
    </div>
}

或者如果你喜欢在生成的 html 中使用变量:

@if (someBoolean == true)
{
    <div>
        Boolean is: @someBoolean
    </div>
}
else
{
    <div>
        Boolean is: @someBoolean
    </div>
}

编辑

如果你只想在 if else 中有 c# 代码,我相信它应该是这样的:

@if (someBoolean == true)
{
    @{
     // Your if instructions here
     }
}
else
{
    @{
     // Your else instructions here
     }
}

【讨论】:

  • 谢谢。我之前尝试过简化这种方法但没有成功——是否可以删除 div 标签(我正在查看您的第一个示例)?
  • 见上面的编辑。不知道这是否有效,我希望如此
  • 谢谢,但事实并非如此。一件事是语法,编译器不喜欢嵌套@{ } 用于分支,但更成问题的是@if 被视为语句,而不是表达式(就像常规C# 一样)。因此,例如在其中一个分支中使用纯常量会立即出错,因为编译器需要赋值。
猜你喜欢
  • 2011-07-03
  • 2011-12-05
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多