我在mvc中有一个textarea
。当输入数据并将其显示给用户时,如何显示换行符?
我这样显示:
<%= Model.Description%>
答案 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)
在视图中将其显示回来时,始终对用户输入的文字进行编码,以确保其安全。
你可以像Cybernate建议的那样做,或者可以将它添加到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 />")%>