2

我正在使用 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() 似乎没有达到这个预期的结果。

4

5 回答 5

2

对数据进行编码,以便您可以在 HTML 中安全地打印它,例如使用HttpServerUtility.HtmlEncode()

HTML 编码确保文本在浏览器中正确显示,并且不会被浏览器解释为 HTML。例如,如果文本字符串包含小于号 (<) 或大于号 (>),浏览器会将这些字符解释为 HTML 标记的左括号或右括号。当字符被 HTML 编码时,它们被转换为字符串&lt;&gt;,这导致浏览器正确显示小于号和大于号。

于 2013-10-03T13:07:41.547 回答
0

查看您的第一次编辑,我敢打赌,改变您的 html 的不是 ASP.NET MVC,而是您的浏览器正试图理解它。

您说您阅读了 JS 的输出。美好的。不要将 C# 代码作为 html 传输。将其作为text/plain内容类型发送,因此浏览器根本不会尝试解析它。

于 2014-09-15T11:13:02.520 回答
0

您是否尝试用 包装原始内容<code></code>

@Html.Raw(Model.DefaultStartingCode)

于 2013-10-03T14:46:11.267 回答
0

在 ASP.NET MVC 4Html.Raw中,将提供的字符串完全不变地写入输出。使用此方法时,您应该确保字符串是正确的 HTML 编码等。

如果您在描述时看到代码片段的意外输出,这并不是Html.Raw在修改您的代码片段。修改发生在其他地方。

于 2013-10-04T06:48:53.680 回答
0

我也有看似原始的输出。对我来说,原因是视图/web.config 中列出了一个程序集,它不是引用程序集的一部分

于 2014-09-15T10:54:50.620 回答