【问题标题】:How to use ? : if statements with Razor and inline code blocks如何使用 ? : 带有 Razor 和内联代码块的 if 语句
【发布时间】:2011-06-13 19:48:13
【问题描述】:

我正在使用新的 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 好像它应该呈现变量的值。

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

【问题讨论】:

  • 我没有使用过 Razor,但根据我所看到的,试试@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
  • 由于这是 razor 中内联三元运算符的最佳结果,我将补充一点,如果您的输出包含 html 或撇号等可编码字符,例如@(isSomething ? "class='test'" : "") 例如注入 javascript 或类似的,它会将它们编码为像 &amp;#39; 这样的实体并打破页面。所以你必须使用Html.Raw("..")。否则,使用上面的代码,你最终会得到类似 &lt;p class=&amp;#39;test&amp;#39;&gt; 的东西,这是无效的。

标签: asp.net asp.net-mvc asp.net-mvc-3 syntax razor


【解决方案1】:

在大多数情况下,the solutionCD.. 都可以正常工作。但是我的情况有点扭曲:

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

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

编译器错误消息:CS0173:条件表达式类型不能 确定,因为之间没有隐式转换 'System.Web.IHtmlString' 和'字符串'

所以我最终写了一个类似下面的语句,虽然不太好,但即使在我的情况下也有效:

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

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

【讨论】:

  • 为什么不只是@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&amp;nbsp;") : Model.MaidenName)
  • Uhm.. 由于前面提到的编译器错误,怎么样? ;)
  • 对不起,我需要更多的咖啡 :)
  • 您可以通过将三元运算符的两边设为相同类型来避免该错误,@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&amp;nbsp;") : Html.Raw(Model.MaidenName))
【解决方案2】:
@( condition ? "true" : "false" )

【讨论】:

  • 我选择了这个,感觉干净,以后很容易阅读
  • 如果您需要显示属性的值(包括字符串)而不是调用 ToString() - 这在我的情况下不起作用。你可以这样做 @(condition ? $"{foo.bar}" : "Default")
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    这应该可行:

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

    【讨论】:

    • 使用括号而不是大括号很奇怪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2019-06-23
    相关资源
    最近更新 更多