我几天都在讨论这个问题,我不确定我的环境或代码本身是否存在问题基于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就好了,但无论我尝试什么,它都会强制执行blasted编码。根据我在MSDN上阅读的内容,有一个关于HTML没有被正确解码的问题的脚注,其中包含空格(我的确如此)。因为我怀疑我是唯一一个面对这个问题的人,所以我会向你们寻求一些想法。
我即将以我的方式克服我的方式,在视图中使用正则表达式进行页面清理,但是我认为在我强行推断之前先从其他人那里得到一些建议会更好。谢谢提前。
答案 0 :(得分:12)
<%:
表示“必要时进行编码”。如果您不想这样,那么 lazy 方法将使用<%=
,但坦率地说,我建议您将其包装在IHtmlString
中,例如:
string yourEncodedHtml = ...
var html = new MvcHtmlString(yourEncodedHtml);
现在,如果你存储那个并显示它,它应该按照“原样”使用html。
答案 1 :(得分:8)
尝试使用:&lt;%=%&gt;
<%= Html.Raw(ViewData["HTMLData"].ToString())%>
&lt;%:%&gt;是ASP.NET 4(和ASP.NET MVC)中HTML编码输出的语法
如何对今天的内容进行HTML编码
ASP.NET应用程序(尤其是那些使用ASP.NET MVC的应用程序)通常依赖于使用&lt;%=%&gt; 代码块表达式来呈现输出。今天的开发人员经常在这些表达式中使用Server.HtmlEncode()或HttpUtility.Encode()辅助方法对输出进行HTML编码。
虽然这种方法很好,但它有两个缺点:
有点冗长 开发人员经常忘记调用Server.HtmlEncode方法 - 并且没有简单的方法来验证其在应用程序中的使用情况
新&lt;%:%&gt;代码块语法
在ASP.NET 4中,我们引入了一种新的代码表达式语法(&lt;%:%&gt; ),其呈现类似于&lt;%=%&gt;的输出块做 - 但在这之前也会自动对HTML进行编码。这消除了对显式HTML编码内容的需要。
我们选择&lt;%:%&gt;语法,以便快速替换&lt;%=%&gt;的现有实例代码块。它还使您可以轻松搜索代码库中的&lt;%=%&gt;用于查找和验证您在应用程序中未使用HTML编码的任何情况的元素,以确保您具有正确的行为。