我正在使用ASP .NET MVC 4来生成Web应用程序。
我将代码以各种编程语言存储在数据库中,包括积极使用尖括号(<>)的C#。我使用javascript库在屏幕上呈现这个代码。一些研究表明,@ Html.Raw()是生成未编码输出的首选方法,但是实践证明以这种方式产生的输出并不是真正的“原始”,而且似乎Razor会在我看到这些尖括号代码并尝试“纠正”糟糕的“HTML”。
最终结果不是有效的C代码。糟糕。
是否有某种方法可以绕过Razor的任何处理方式并将查询中的代码直接输出到视图中?
修改
以下是特别讨厌我的例子:
using System;
public class Greeter {
public static void Main() {
string name = "<Your Name>";
Console.WriteLine("Hello, " + name + "! Welcome to C#.");
}
}
通过Html.Raw()打印到HTML输出的是:
using System;
public class Greeter {
public static void Main() {
string name = "<your name="">";
Console.WriteLine("Hello, " + name + "! Welcome to C#.");
}
}
</your>
编辑2:
应该承认原始C#不是有效的HTML。该代码实际上是在javascript中读取的,并且经过特定于HTML中呈现代码的编码(使用codemirror)。这就是为什么编码HTML(实际上会进行两次编码)和“纠正HTML”(这使得乱码C#)都不适合我的特定需求。这就是我想按原样输出数据的原因。
编辑3:
为了澄清,我的问题与如何在HTML中呈现代码无关。我的问题是,如何使用Razor或通过ASP .NET MVC提供的其他实用工具实现对视图原始底层页面源中数据单元输出的纯粹控制? @ Html.Raw()似乎没有达到预期的效果。
答案 0 :(得分:2)
对数据进行编码,以便您可以安全地以HTML格式打印,例如使用HttpServerUtility.HtmlEncode()
:
HTML编码可确保文本在浏览器中正确显示,而不会被浏览器解释为HTML。例如,如果文本字符串包含小于符号(&lt;)或大于符号(&gt;),则浏览器会将这些字符解释为HTML标记的左括号或右括号。如果字符是HTML编码的,则会将它们转换为字符串
<
和>
,这会导致浏览器显示小于号并且正确显示大于号。
答案 1 :(得分:0)
您是否尝试使用<code></code>
包装Raw contente?
@Html.Raw(Model.DefaultStartingCode)
答案 2 :(得分:0)
在ASP.NET MVC 4中Html.Raw
将提供的字符串写入输出完全不变。在使用此方法时,您应该确保字符串是正确的HTML编码等。
如果您发现代码段的意外输出正如您所描述的那样,Html.Raw
正在修改您的代码段。修改发生在其他地方。
答案 3 :(得分:0)
我也有看似原始的输出。对我来说原因是,一个程序集列在Views / web.config中,它不是引用程序集的一部分
答案 4 :(得分:0)
看看你的第一个编辑,我敢打赌,不是ASP.NET MVC正在改变你的html,但是你的浏览器试图理解它。
你说你读过JS的输出。精细。不要将C#代码作为html传输。将其作为text/plain
内容类型发送,因此浏览器根本不会尝试解析它。