asp.net 如何使用?:带有Razor和内联代码块的if语句

jjhzyzn0  于 2022-11-19  发布在  .NET
关注(0)|答案(5)|浏览(145)

我正在用新的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的第一部分,就好像它应该呈现变量的值一样。
    有人知道如何解决这些问题吗?
7uzetpgm

7uzetpgm1#

这应该可行:

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

yacmzcpb2#

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

z8dt9xmd3#

关键是将表达式封装在@分隔符后的括号中。您可以使任何复合表达式都以这种方式工作。

ie3xauqp

ie3xauqp4#

在大多数情况下,CD..the solution会工作得很好。但是,我遇到了一个有点扭曲的情况:

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

这将在我的页面中打印出我的“ “,分别生成源代码&amp;nbsp;。现在有一个函数Html.Raw("&nbsp;"),它应该让你写源代码,除了在这个星座中它抛出了一个编译器错误:
编译器错误消息:CS0173:无法确定条件表达式得类型,因为在“System.Web.IHtmlString”与“string”之间没有隐式转换
因此,我最后写了一个如下的语句,这个语句不太好,但即使在我的情况下也很有效:

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

注意:有趣的是,一旦你在花括号内,你必须重新启动一个剃刀块。

gr8qqesn

gr8qqesn5#

在 Blazor 中 :

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

中 的 每 一 个

相关问题