代码之家  ›  专栏  ›  技术社区  ›  SiberianGuy

不编码的ASP.NET MVC Razor呈现

  •  237
  • SiberianGuy  · 技术社区  · 14 年前

    Razor默认对字符串进行编码。有没有什么特殊的语法可以在不编码的情况下呈现?

    7 回复  |  直到 14 年前
        1
  •  367
  •   Lucas    11 年前

    由于ASP.NET MVC 3,您可以使用:

    @Html.Raw(myString)
    
        2
  •  58
  •   Matthew Vines    14 年前
    @(new HtmlString(myString))
    
        3
  •  31
  •   Piotr Kula David Boike    6 年前

    与前面提到的@Html.Raw(string)方法一样,如果输出MvcHtmlString,则不会对其进行编码。当向HtmlHelper添加自己的扩展时,或者当从视图模型返回一个您知道可能包含html的值时,这将非常有用。

    例如,如果视图模型是:

    public class SampleViewModel
    {
      public string SampleString { get; set; }
      public MvcHtmlString SampleHtmlString { get; set; }
    }
    

    对于Core1.0+(和MVC5+),使用HtmlString

    public class SampleViewModel
    {
      public string SampleString { get; set; }
      public HtmlString SampleHtmlString { get; set; }
    }
    

    然后

    <!-- this will be encoded -->
    <div>@Model.SampleString</div>
    <!-- this will not be encoded -->
    <div>@Html.Raw(Model.SampleString)</div>
    <!-- this will not be encoded either -->
    <div>@Model.SampleHtmlString</div>
    
        4
  •  10
  •   Tony Wall    9 年前

    使用 @Html.Raw()

    @Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
    

    然后,您可以放心,您没有创建潜在的安全漏洞,并且所有浏览器中都正确显示任何特殊/外来字符。

        5
  •  5
  •   gutsy_guy    7 年前

    对于ActionLink,它通常在链接文本上使用HttpUtility.Encode。 你可以用 HttpUtility.HtmlDecode(myString)

      @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
        6
  •  1
  •   Hamid Shahid    8 年前

    你也可以使用WriteLiteral方法

        7
  •  0
  •   Ashley Medway Karthi    6 年前

    @Html.Raw(yourString)