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

Mic*_*cah 147 asp.net syntax asp.net-mvc razor asp.net-mvc-3

我正在使用新的Razore视图引擎更新旧的.aspx视图.我有很多地方,我有这样的代码:

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Run Code Online (Sandbox Code Playgroud)

理想情况下我想这样做:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
Run Code Online (Sandbox Code Playgroud)

但是这里有两个问题:

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

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

CD.*_*D.. 285

这应该工作:

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

  • 使用括号而不是括号非常奇怪 (3认同)

小智 31

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


Dan*_*tos 24

@( condition ? "true" : "false" )
Run Code Online (Sandbox Code Playgroud)

  • 我选择了这个,感觉很干净并且很容易稍后再读回来 (2认同)

Dam*_*gel 7

在大多数情况下,CD..的解决方案将工作得很好。然而,我有一个更扭曲的情况:

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)
Run Code Online (Sandbox Code Playgroud)

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

编译器错误消息:CS0173:无法确定条件表达式的类型,因为“System.Web.IHtmlString”和“string”之间没有隐式转换

所以我最终写了一个像下面这样的语句,它不太好,但即使在我的情况下也能工作:

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName } 
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,我需要更多咖啡 :) (3认同)
  • 您可以通过使三元运算符的两侧具有相同类型来避免该错误,`@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Html.Raw(Model.MaidenName))` (2认同)