好的,对于 ASP.Net MVC 来说很新,所以如果这是一个愚蠢的问题,我很抱歉,但是我该如何将 ViewBag 的值显示为 HTML。例如,如果 ViewBag.SomeMessage 包含以下文本:
<h3>Test</h3><p>Test</p><p>Test</p><p>Test</p><p>Test</p><p>TEST</p>
我将如何实际让页面呈现为普通 HTML?还是有一种我完全想念的更简单的方法来实现这一目标?
干杯!
好的,对于 ASP.Net MVC 来说很新,所以如果这是一个愚蠢的问题,我很抱歉,但是我该如何将 ViewBag 的值显示为 HTML。例如,如果 ViewBag.SomeMessage 包含以下文本:
<h3>Test</h3><p>Test</p><p>Test</p><p>Test</p><p>Test</p><p>TEST</p>
我将如何实际让页面呈现为普通 HTML?还是有一种我完全想念的更简单的方法来实现这一目标?
干杯!
每个人的使用都是正确的,@Html.Raw()
但我想指出要小心这一点,因为它会使您的网站容易受到 XSS 漏洞的影响。
我会将它@Html.Raw(ViewBag.SomeMessage)
与Microsoft 的 Anti-XSS 库结合使用,以确保您不会由此引入任何漏洞。
编辑:
Anti-XSS 库的优点(如果你还没有看过的话)是它有一个已批准标记的白名单(例如<b>
、<h3>
等),因此只有已批准的标记才会被未编码。
Edit2: 这是如何完成的示例。
您将使用以下Raw
方法:
@Html.Raw(ViewBag.SomeMessage)
我认为你可以这样做:
@Html.Raw(ViewBag.SomeMessage)
@Html.Raw(ViewBag.SomeHtmlProperty)
话虽如此,这是我的免责声明:不要使用 ViewBag。使用强类型视图和视图模型。ViewBag/ViewData 就像 ASP.NET MVC 应用程序的癌症。
将数据作为不应再次编码的 HTML 编码字符串放入 ViewBag。
ViewBag.myBag = MvcHtmlString.Create(myCode ?? string.Empty);
然后使用
@ViewBag.myBag
MvcHtmlString的文档。