7

这几天我一直在摸不着头脑,我不确定这是我的环境问题还是基于 ASP.NET MVC 的代码本身的问题(尽管我有 5 年的 C# 经验)。我正在使用带有所有补丁的 Win7x64 和 VS 2008 最近的全新安装。

我将原始 HTML 存储在数据库表中,控制器根据我无法控制的一些规则选择性地加载该表。不幸的是,当尝试将值填充到控件中的视图数据中时,如下所示:

ViewData["HTMLData"] = DAO.HTMLDataGet();

当我看到输出时,它是转义/HTML 编码的。我尝试使用以下所有这些似乎都无法解决此问题:

<%: HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString())%>

和...

<%: Server.HtmlDecode(ViewData["HTMLData"].ToString())%>

和...

<%: Html.Raw(ViewData["HTMLData"].ToString())%>

...它可以很好地从数据库表中获取原始 HTML,但是无论我尝试什么,它都会继续强制执行该爆炸编码。从我在 MSDN 上阅读的内容来看,有一个脚注是关于由于 HTML 未正确解码而导致的问题,其中包含空格(我的就是这样)。因为我怀疑我是唯一一个面临这个问题的人,所以我向你们寻求一些想法。

我打算用正则表达式来进行页面清理,但我认为最好先从其他人那里得到一些建议,然后再强行使用它。提前致谢。

4

3 回答 3

16

<%: 意思是“必要时编码”。如果您不希望这样,那么懒惰的方法是使用<%=,但坦率地说,我建议您改为将其包装在 中IHtmlString,例如:

string yourEncodedHtml = ...
var html = new MvcHtmlString(yourEncodedHtml);

现在,如果您存储显示它,它应该采用“原样”的 html。

于 2012-08-20T07:20:32.680 回答
8

尝试使用: <%= %>

<%= Html.Raw(ViewData["HTMLData"].ToString())%>

<%: %> 是 ASP.NET 4(和 ASP.NET MVC)中 HTML 编码输出的语法

更多细节

今天如何对内容进行 HTML 编码

ASP.NET 应用程序(尤其是那些使用 ASP.NET MVC 的应用程序)通常依赖于使用<%= %>代码块表达式来呈现输出。今天的开发人员经常在这些表达式中使用 Server.HtmlEncode() 或 HttpUtility.Encode() 辅助方法在输出渲染之前对输出进行 HTML 编码。

虽然这很好用,但它有两个缺点:

有点冗长 开发人员经常忘记调用 Server.HtmlEncode 方法——而且没有简单的方法来验证它在应用程序中的使用情况

新的 <%: %> 代码块语法

在 ASP.NET 4 中,我们引入了一种新的代码表达式语法 ( <%: %> ),它可以像 <%= %> 块一样呈现输出 - 但它也会在这样做之前自动对其进行 HTML 编码。这消除了对内容进行显式 HTML 编码的需要。

我们选择了 <%: %> 语法,以便快速替换现有的 <%= %> 代码块实例。它还使您能够轻松地在代码库中搜索 <%= %> 元素,以查找和验证您未在应用程序中使用 HTML 编码的任何情况,以确保您具有正确的行为。

于 2012-08-20T07:25:27.850 回答
0

你几乎用过你尝试过的东西。给了我这样做的想法,这很有效:

Html.Raw(HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString()))
于 2022-02-04T19:10:25.270 回答