【发布时间】:2012-08-15 13:00:56
【问题描述】:
这几天我一直在摸不着头脑,我不确定这是我的环境问题还是基于 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 未正确解码而导致的问题,其中包含空格(我的就是这样)。因为我怀疑我是唯一一个遇到过这种情况的人,所以我向你们寻求一些想法。
我打算在视图中使用正则表达式来进行页面清理,但我认为最好先从其他人那里获得一些建议,然后再强行使用它。提前致谢。
【问题讨论】:
-
内容是否都是要返回到视图的html?
-
我相信我已经解决了这个谜团。我使用 而不是 -- 后者解决了这个问题。微软试图让事情变得简单,他们用 ASP.Net 做了很多愚蠢的决定,比如这个和其他无用的伪标记
-
@user1611050 实际上,你是对的:做出了一个愚蠢的决定,即 最初
<%=是唯一可用的,而<%:是正确的 行为(并且是在很久以后添加的),并且应该几乎一直使用。在 razor 中,他们做对了:@foo与<%:foo%>相同,即编码。如果您认为<%=是更可取的行为,那么:您还没有完成足够多的 html 编程(尤其是 ASP.NET),并且没有充分考虑“xss”。编写预先形成的 html(从视图)是例外,而不是常见情况。
标签: c# html asp.net-mvc decode viewdata