ASP.NET MVC Html.Encode - New lines

后端 未结 5 1163
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-30 00:03

Html.Encode seems to simply call HttpUtility.HtmlEncode to replace a few html specific characters with their escape sequences.

However this

相关标签:
5条回答
  • 2020-12-30 00:22

    Put your output inside <pre></pre> and/or <code></code> blocks. E.g:

    <pre>@someValue</pre> / <code>@someValue</code>
    

    Use the equivalent css on an existing div:

    <div style="white-space:pre-wrap;">@someValue</div>
    

    Depends whether you want the semantic markup or whether you want to fiddle with css. I think these are both neater than inserting <br/> tags.

    0 讨论(0)
  • 2020-12-30 00:35
        /// <summary>
        /// Returns html string with new lines as br tags
        /// </summary>
        public static MvcHtmlString ConvertNewLinesToBr<TModel>(this HtmlHelper<TModel> html, string text)
        {
            return  new MvcHtmlString(html.Encode(text).Replace(Environment.NewLine, "<br />"));
        }
    
    0 讨论(0)
  • 2020-12-30 00:40

    HtmlEncode is only meant to encode characters for display in HTML. It specifically does not encode whitespace characters.

    I would go with your first option, and make it an extension method for HtmlHelper. Something like:

    public static string HtmlEncode(this HtmlHelper htmlHelper,
                                    string text, 
                                    bool preserveWhitespace)
    {
        // ...
    }
    

    You could use String.Replace() to encode the newlines and spaces (or Regex.Replace if you need better matching).

    0 讨论(0)
  • 2020-12-30 00:46

    Using the style="white-space:pre-wrap;" worked for me. Per this article.

    0 讨论(0)
  • 2020-12-30 00:48

    If you use Razor you can do:

    @MvcHtmlString.Create(Html.Encode(strToEncode).Replace(Environment.NewLine, "<br />"))
    

    in your view, or in your controller:

    HttpServerUtility httpUtil = new HttpServerUtility();
    MvcHtmlString encoded = httpUtil.HtmlEncode(strToEncode).Replace(Environment.NewLine, "<br />");
    

    I have not tested the controller method, but it should work the same way.

    0 讨论(0)
提交回复
热议问题