【问题标题】:Display encoded html with razor用剃刀显示编码的 html
【发布时间】:2011-06-29 02:14:14
【问题描述】:

我将编码的 HTML 存储在数据库中。

我可以正确显示它的唯一方法是:

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

太丑了。 有没有更好的方法来做到这一点?

【问题讨论】:

    标签: asp.net-mvc-3 razor html-encode


    【解决方案1】:

    我刚刚得到另一个案例,用 Razor 和 Java Script 显示反斜杠 \

    我的@Model.AreaName 看起来像 Name1\Name2\Name3 所以当我显示它时,所有反斜杠都消失了,我看到了 Name1Name2Name3

    我找到了解决办法:

    var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");
    

    不要忘记在chtml 页面顶部添加@using Newtonsoft.Json

    【讨论】:

      【解决方案2】:

      试试这个:

      <div class='content'>    
         @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
      </div>
      

      【讨论】:

      • 谢谢!这更好,但仍然不是我想要的。
      • 我最终根据这个想法制作了一个扩展方法。 @Html.RawDecode(Model.Content)
      • 只是避免;最后
      • 这行得通,但它太脏了……最后用这个包装做了一个扩展方法,有人能解释为什么 .Raw 不起作用吗?
      • 请注意,这会引入 XSS 漏洞,因此请确保您信任输入。如果您需要存储和呈现来自用户的格式化文本,请使用更合适的标记语言,如 markdown 或一些自定义 XML,如编辑器。
      【解决方案3】:

      我将编码的 HTML 存储在数据库中。

      恕我直言,您不应该将 html 编码的数据存储在数据库中。只需以纯文本(未编码)存储并像这样显示您的数据,您的 html 将被自动编码:

      <div class='content'>
          @Model.Content
      </div>
      

      【讨论】:

        【解决方案4】:

        您也可以简单地使用HtmlString

            @(new HtmlString(Model.Content))
        

        【讨论】:

          【解决方案5】:

          这很简单:

          HttpUtility.HtmlDecode(Model.Content)
          

          另一种解决方案,你也可以返回一个 HTMLString,Razor 会输出正确的格式:

          在视图本身中:

          @Html.GetSomeHtml()
          

          在控制器中:

          public static HtmlString GetSomeHtml()
          {
              var Data = "abc<br/>123";
              return new HtmlString(Data);
          }
          

          【讨论】:

            【解决方案6】:

            使用Html.Raw()。 Phil Haack 在http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx 上发布了一个不错的语法指南。

            <div class='content'>
                @Html.Raw( Model.Content )
            </div>
            

            【讨论】:

            • 感谢您的回复。但我认为 Html.Raw() 是“按原样显示,不编码”。因此,如果我使用它,那么在将其保存到数据库之前,我无法解码我的 html。因此它将显示用户输入的内容,而无需任何“安全”检查。所以我认为这不是最好的解决方案。
            猜你喜欢
            • 2017-04-16
            • 2020-03-02
            • 1970-01-01
            • 1970-01-01
            • 2023-03-17
            • 1970-01-01
            • 2018-05-19
            • 1970-01-01
            相关资源
            最近更新 更多