如何使用? : if 语句和 Razor 和内联代码块

我在更新我的旧。新的 Razore 视图引擎的 aspx 视图。我在很多地方都有这样的代码:

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>

理想情况下,我想这样做:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>

然而,这里有两个问题:

  1. vote-up@{puzzle.UserVote... . 没有将@符号视为代码块的开始
  2. @puzzle.UserVote == VoteType.Up查看第一部分 @puzzle.UserVote,就好像它应该呈现变量的值一样。

有人知道如何解决这些问题吗?

119979 次浏览

这应该会奏效:

<span class="vote-up@(puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span>

关键是将表达式封装在@分隔符后面的圆括号中。任何复合表达式都可以这样使用。

@( condition ? "true" : "false" )

在大多数情况下,CD.解决办法完全可以正常工作,但是我有一个更加扭曲的情况:

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)

这将在我的页面中打印“ & nbsp;”,分别生成源 &amp;nbsp;。现在有一个函数 Html.Raw("&nbsp;")可以让你编写源代码,但是在这个星座中它会抛出一个编译器错误:

编译器错误信息: CS0173: 条件表达式的类型不能 之间没有隐式转换 ‘ System. Web.IHtmlString’和‘ string’

所以我最后写了一个声明,就像下面这样,虽然不怎么样,但是对我来说还是有用的:

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName }

注意: 有趣的是,一旦进入花括号,就必须重新启动 Razor 块。

在 Blazor 中:

@(a == "Y" ? ((MarkupString)"<i class='fas fa-bolt warning' style='color:#FDCD00'></i> ") : ((MarkupString)""))