Mvc raw没有输出

本文关键字:输出 raw Mvc | 更新日期: 2023-09-27 18:06:56

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

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

编辑

然而,这确实有效:

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

Mvc raw没有输出

我相信这是因为Razor引擎混淆了"是否需要"或"如何处理"您编写的第一类代码。如果你这样做,那就行了:

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

请注意Html语法开头的@。Scott Guthrie对此有一个解释。总结如下:

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

Razor通过使您能够显式地指示使用@:字符序列开始一行内容在代码块内。@:序列表示后面的内容应被视为内容块。

现在我相信这适用于你的具体问题。

@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元素下。