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

时间:2011-01-22 21:11:21

标签: asp.net asp.net-mvc asp.net-mvc-3 syntax 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,好像它应该呈现变量的值。
  3. 任何人都知道如何解决这些问题?

4 个答案:

答案 0 :(得分:276)

这应该有效:

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

答案 1 :(得分:31)

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

答案 2 :(得分:21)

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

答案 3 :(得分:3)

在大多数情况下,the solution CD..的效果非常好。但是我的情况有点扭曲:

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

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

  

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

所以我最后写了一个类似下面的声明,这个声明不太好,但在我的情况下也能正常工作:

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

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