Mvc raw没有输出

时间:2013-04-02 12:16:20

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

我已将问题简化为最简单的形式。为什么这不会在我的页面上输出任何内容?

@if(true){Html.Raw("<a>test</a>");}

修改

但这确实有效:

@if ( true ) { <span>@Html.Raw( "<a>test</a>" )</span>}

2 个答案:

答案 0 :(得分:3)

我相信这是因为Razor引擎混淆了“如果它需要”或“如何处理”您编写的第一类代码。如果你这样做,那将是有效的:

@if(true){@Html.Raw("<a>test</a>");}

请注意@语法开头的Html。关于那个问题an explanation here by Scott Guthrie。总结如下:

  

并非所有内容容器块都以标记元素标记开头,   并且有些情况下Razor解析器无法隐式检测   内容块。

     

Razor通过让您明确指出来解决这个问题   使用@:字符序列开始一行内容   在代码块中。 @:序列表示该行   以下内容应被视为内容块。

现在我认为这适用于您的具体问题。

答案 1 :(得分:1)

@if(true){Html.Raw("<a>test</a>");}

上面的行不会给你html输出,因为razor Parser通过读取开始和结束字符或HTML元素来推断代码结束。 因为,你的代码在if条件中不包含任何html元素,所以解析器会像我们在控制器中那样将它作为表达式来表达。

@if ( true ) { <span>@Html.Raw( "<a>test</a>" )</span>}

这是有效的,因为@Html.Raw包含在span元素下。