Razor中无法呈现HTML

3

我在一个视图文件中有如下内容:

 @Html.ActionLink("Details", "Details", new { id=item.RuleId }) |                     
  @Html.ActionLink("Edit", "Edit", new { id = item.RuleId }) |
  @Html.ActionLink("Delete", "Delete", new { id = item.RuleId })

这个方法是可行的,但当我改变它成其他形式时

 @Html.ActionLink("Details", "Details", new { id=item.RuleId }) |

     @if( something )
  {                
  Html.ActionLink("Edit", "Edit", new { id = item.RuleId });
  Html.ActionLink("Delete", "Delete", new { id = item.RuleId });
  }     

尽管进入分支,但它停止显示第二和第三个项目。有任何想法原因是什么?


<text>@Html.ActionLink(derp)</text> - Luke Hutton
2个回答

10

Html.ActionLink 返回一个包含 <a> 标签的 IHtmlString 对象。
它本身并不做任何事情。

你的代码正在忽略这个结果,因此什么也没有发生。

你需要使用 @ 字符将结果打印到页面上。


谢谢!那个方法可行。但我仍然不明白为什么在 if 语句中需要 @ 字符。if 语句本身难道不已经足够了吗?我以为 @ 只是用来分隔 Razor 代码块的。 - coredump
4
在Razor中,@符号有两种不同的含义。@{或者@if表示开启了一个代码块(就是你所说的)。而@expression则用于将表达式输出到页面上(这就是我所说的),并且可以出现在代码和标记上下文中。请注意不改变原始意思。 - SLaks
好的。我以为 @expression 是一行代码的缩写。我建议你把这个加到答案里。 - coredump

0

请使用以下代码替换您的代码:

@Html.ActionLink("Details", "Details", new { id=item.RuleId }) |

@if( something )
{                
  @Html.ActionLink("Edit", "Edit", new { id = item.RuleId })
  @Html.ActionLink("Delete", "Delete", new { id = item.RuleId })
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接