我喜欢这个新的视图引擎,其中一个最酷的功能是默认编码所有内容。但有一些我不明白的东西, 让我们说我已经创建了这个HTML段落
<p>
this is a test Paragraph for both Development & Production
</p>
现在,如果我检查萤火虫中的元素我
<p>
this is a test Paragraph for both Development & Production
</p>
这是正确的,但如果我在浏览器中查看源代码 我得到
<p>
this is a test Paragraph for both Development & Production
</p>
我尝试使用W3C验证验证页面我得到错误“&amp;”字符无效。
现在我的文件正如我认为的那样正确
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11 /DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
我错过了什么?
答案 0 :(得分:11)
默认情况下,Razor会编码它所写的所有内容,而不是页面中的所有内容。由于Razor事物P标签内的文本是HTML,它不会对它进行任何编码。
请查看以下示例,以便更好地了解差异:
<p>this is a test Paragraph for both Development & Production</p>
@{var body = "this is a test Paragraph for both Development & Production";}
<p>@body</p>
@{var body2 = new HtmlString("this is a test Paragraph for both Development & Production");}
<p>@body2</p>
如果你渲染这个页面,你会注意到第一个段落没有被编码,而第二个段落将被编码,因为它正在编码变量的输出。然后第三个例子将产生与第一个相同的输出,因为它使用特殊的HtmlString,假设输入是安全的。
作为参考,这是Razor的输出:
<p>this is a test Paragraph for both Development & Production</p>
<p>this is a test Paragraph for both Development & Production</p>
<p>this is a test Paragraph for both Development & Production</p>
答案 1 :(得分:3)
Razor只会转移@
块的输出。
你仍然需要自己逃避文字标记
Firebug显示&
,因为浏览器非常智能,可以正确解释您的无效标记。
答案 2 :(得分:-1)
Firebug会在查看器中显示某些内容时自动对其进行HTML编码。这是误导。查看源显示您的网站实际输出的内容。