Mvcにtextarea
があります。データが入力され、それをユーザーに表示しているときに、改行を表示するにはどうすればよいですか?
私はこのように表示します:
<%= Model.Description%>
次のクラスは、テキストを適切にエンコードする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)
問題を解決するためのわずかに異なる(そして、私見、より良く、より安全な)方法については、 同様の質問に対するこの回答 を参照してください。
基本的に、すべての改行文字を<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) %>
次のようなものを試してください:
<%=
Regex.Replace(
Html.Encode(Model.Description),
Environment.NewLine,
"<br/>",
RegexOptions.IgnoreCase||RegexOptions.Multiline
)
%>
静的HTMLヘルパー拡張機能を提供する上記の回答は、廃止されたコンストラクターを提供します。
return new MvcHtmlString(builder.ToString());
この行は、次のコード行で置き換えることができます。
return MvcHtmlString.Create((builder.ToString()));
私はこれを answer はcssを使用するだけで素敵な方法で問題を解決すると思います:style="white-space: pre-line"
チェック: CSSの空白プロパティ 。
Asp.net mvc razorの場合、xss攻撃をブロックするためにHtml.Encodeを使用しました
@Html.Raw(Html.Encode(Model.Description).Replace(Environment.NewLine, "<br />"))
私はHtmlExtensions、Environment.NewLine、Regexを使用するのが好きです。これらは異なる回答に含まれていたので、上記の回答を1つのメソッドに入れました。
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)
多分それは答えです: HTMLエンコードされたMVCビューで改行をどのように処理しますか?
または
あなたが試すことができます:
Model.Description.Replace(Environment.NewLine, "<br/>");
これは私のために働く-
<%= HttpUtility.HtmlDecode(Html.ActionLink( "AOT <br /> Claim#"、 "actionName"))%>