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>}
我相信这是因为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元素下。