【问题标题】:How can I show a viewbag as html?如何将 viewbag 显示为 html?
【发布时间】:2011-09-02 15:32:52
【问题描述】:

好的,对于 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?还是有一种我完全想念的更简单的方法来实现这一点?

干杯!

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 viewbag


    【解决方案1】:

    每个人在使用@Html.Raw() 时都是正确的,但我想指出要小心这一点,因为它会使您的网站容易受到 XSS 漏洞的影响。

    我会将@Html.Raw(ViewBag.SomeMessage)Microsoft's Anti-XSS Library 结合起来,以确保您不会由此引入任何漏洞。

    编辑: Anti-XSS 库的优点(如果你还没有看过的话)是它有一个批准标记的白名单(例如<b><h3> 等),这样只有批准的标记才会被取消。编码。

    编辑2: Here's an example 这是如何完成的。

    【讨论】:

    • 无耻地自我宣传什么是 xss 和使用反 xss 以及其他防黑客的东西:channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV333
    • 就 Anti-XSS 库而言,您是说有一种方法可以实现它,可以改变 Html.Raw 的行为以执行您概述的操作,还是您说要使用为了安全起见,它与 Html.Raw 一起使用?
    【解决方案2】:

    您将使用Raw 方法:

     @Html.Raw(ViewBag.SomeMessage)
    

    【讨论】:

      【解决方案3】:

      我认为你可以这样做:

      @Html.Raw(ViewBag.SomeMessage)
      

      【讨论】:

        【解决方案4】:
        @Html.Raw(ViewBag.SomeHtmlProperty)
        

        话虽如此,我的免责声明如下:不要使用 ViewBag。使用强类型视图和视图模型。对于 ASP.NET MVC 应用程序来说,ViewBag/ViewData 就像癌症一样。

        【讨论】:

        • 为什么?请解释。为什么 ViewBag “像癌症一样”?
        【解决方案5】:

        将数据作为不应再次编码的 HTML 编码字符串放入 ViewBag。

        ViewBag.myBag = MvcHtmlString.Create(myCode ?? string.Empty);
        

        然后使用

        @ViewBag.myBag
        

        MvcHtmlString 的documentation

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多