【问题标题】:HTML not rendering inside Razor if如果在 Razor 中不呈现 HTML
【发布时间】:2013-07-06 05:20:27
【问题描述】:

我有一个类似的视图文件

 @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>

标签: c# html asp.net asp.net-mvc razor


【解决方案1】:

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

您的代码忽略了这个结果,所以什么也没有发生。

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

【讨论】:

  • 谢谢!那行得通。但我仍然不明白为什么我需要在 if 语句中使用 @ 字符。 if 语句有它还不够吗?我以为 @ 只是为了分隔 Razor 代码块。
  • @coredump: @ 在 Razor 中意味着两个不同的东西。 @{@if 打开一个代码块(你在说什么)。 @expression 将表达式打印到页面(我正在谈论的内容)并且可以出现在代码或标记上下文中。
  • 好的。我认为@expression 是在线代码的简写。我建议您可以将其添加到答案中。
【解决方案2】:

用这个替换你的代码:

@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 })
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2015-02-01
    • 2014-10-15
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多