我在MVC中有一个textarea
。 当在其中输入数据并将其显示给用户时,如何显示换行符?
我是这样显示的:
<%= Model.Description%>
我在MVC中有一个textarea
。 当在其中输入数据并将其显示给用户时,如何显示换行符?
我是这样显示的:
<%= Model.Description%>
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)
return MvcHtmlString.Create(HttpUtility.HtmlEncode(text).Replace("\n", "<br />"));
来替换整个body呢? - Chris为了以稍微不同(而且,我认为更好、更安全)的方式解决这个问题,请参见类似问题的这个答案。
基本上,与其费力地将所有换行符转换为<br>
元素,还不如将以下CSS应用于显示输入文本的元素:
white-space: pre-line
为确保安全性,始终对用户输入的文本进行编码,然后在视图中显示。
您可以像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) %>
@Html.Raw(Html.Encode(Model.Description).Replace(Environment.NewLine, "<br />"))
尝试类似以下代码:
<%=
Regex.Replace(
Html.Encode(Model.Description),
Environment.NewLine,
"<br/>",
RegexOptions.IgnoreCase||RegexOptions.Multiline
)
%>
Regex.Replace
。 - SLaksreturn new MvcHtmlString(builder.ToString());
return MvcHtmlString.Create((builder.ToString()));
我喜欢使用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)
<%= HttpUtility.HtmlDecode(Html.ActionLink("AOT <br/> Claim #", "actionName" ))%>
<br />
。 - Shawn Mclean