asp.net mvc转换\ n新行到html中断

时间:2011-02-17 17:05:47

标签: asp.net-mvc asp.net-mvc-2

我在mvc中有一个textarea。当输入数据并将其显示给用户时,如何显示换行符?

我这样显示:

<%= Model.Description%>

11 个答案:

答案 0 :(得分:50)

以下类实现了一个正确编码文本的HtmlHelper:

public static class HtmlExtensions
{
    public static MvcHtmlString Nl2Br(this HtmlHelper htmlHelper, string text)
    {
        if (string.IsNullOrEmpty(text))
            return MvcHtmlString.Create(text);
        else
        {
            StringBuilder builder = new StringBuilder();
            string[] lines = text.Split('\n');
            for (int i = 0; i < lines.Length; i++)
            {
                if (i > 0)
                    builder.Append("<br/>\n");
                builder.Append(HttpUtility.HtmlEncode(lines[i]));
            }
            return MvcHtmlString.Create(builder.ToString());
        }
    }
}

您可以在视图中轻松使用:

<%= Html.Nl2Br(Model.MultilineText) %>

或者使用Razor:

@Html.Nl2Br(Model.MultilineText)

答案 1 :(得分:17)

对于稍微不同(以及恕我直言,更好,更安全)解决问题的方法,请参阅this answer to a similar question

基本上,不是将所有新行字符转换为<br>元素的麻烦,而是将以下CSS应用于显示输入文本的元素:

white-space: pre-line

答案 2 :(得分:9)

在视图中将其显示回来时,始终对用户输入的文字进行编码,以确保其安全。

你可以像Cyber​​nate建议的那样做,或者可以将它添加到HtmlHelper扩展方法

public static string EncodedMultiLineText(this HtmlHelper helper, string text) {
  if (String.IsNullOrEmpty(text)) {
    return String.Empty;
  }
  return Regex.Replace(helper.Encode(text), Environment.NewLine, "<br/>")
}

这样可以在视图中轻松重复使用

<%= Html.EncodedMultiLineText(Model.Description) %>

答案 3 :(得分:6)

尝试这样的事情:

<%=
Regex.Replace(
              Html.Encode(Model.Description), 
              Environment.NewLine, 
              "<br/>", 
              RegexOptions.IgnoreCase||RegexOptions.Multiline
             )
%>

答案 4 :(得分:5)

上面提供静态HTML帮助扩展的答案提供了一个过时的构造函数:

return new MvcHtmlString(builder.ToString());

此行可以由以下代码行替换:

return MvcHtmlString.Create((builder.ToString()));

答案 5 :(得分:3)

我认为answer以一种很好的方式解决问题,只需使用css:style="white-space: pre-line"同时检查:CSS white space property

答案 6 :(得分:1)

我喜欢使用HtmlExtensions,Environment.NewLine和Regex,它们有不同的答案,所以我将上述答案放在一个方法中。

public static MvcHtmlString MultiLineText(this HtmlHelper htmlHelper, string text) {
 if (string.IsNullOrEmpty(text)) {
     return MvcHtmlString.Create(string.Empty);
 }
 return MvcHtmlString.Create(Regex.Replace(HttpUtility.HtmlEncode(text), Environment.NewLine, "<br/>"));
}

使用

<%= Html.MultiLineText(Model.MultilineText) %>

或者

@Html.MultiLineText(Model.MultilineText)

答案 7 :(得分:1)

对于Asp.net mvc razor,我使用Html.Encode阻止xss攻击

@Html.Raw(Html.Encode(Model.Description).Replace(Environment.NewLine, "<br />"))

答案 8 :(得分:0)

也许这就是答案:How do you handle line breaks in HTML Encoded MVC view?

你可以尝试:

Model.Description.Replace(Environment.NewLine, "<br/>");

答案 9 :(得分:0)

这对我有用 -

  

&lt;%= HttpUtility.HtmlDecode(Html.ActionLink(“AOT&lt; br /&gt;声明#”,“actionName”))%&gt;

答案 10 :(得分:-1)

看起来你似乎没有尝试使用HTML Encode,因此常规替换应该可以正常工作。

<%= Model.Description.Replace(Environment.NewLine, "<br />")%>