ASP.NET MVC: как отображать многострочный текст?

Показать модель:

public class Note
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}

Шаблон редактора по умолчанию создает элемент <textarea> с сохраненными символами новой строки.

Шаблон отображения по умолчанию отображает текст как одну строку с удалением новых строк.

Я пробовал это, но он не работает:

~/Views/Shared/EditorTemplates/MultilineText.cshtml

@model string

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

Я могу сделать что-то глупое как @Html.Raw(Model.Replace("e", "<br />")), и это сработает, но, конечно, я хочу только заменить символы новой строки элементом <br />! Я также попытался использовать @"\n", и это тоже не сработало.

Любые идеи?

Спасибо!

Ответ 1

Вы можете попробовать следующее:

@Html.Raw("<pre>"+ Html.Encode(Model) + "</pre>");

Это сохранит ваш контент и покажет его как есть.

Ответ 2

Ответ заключается в том, что вы ничего не сделали бы. Это работа вашей таблицы стилей. В основном, сделайте контент любым способом, например, в <p>, и используйте CSS для управления сохранением пробела. Например:

(в вашем теге стиля или в вашем CSS)

p.poem {
   white-space:pre;
}

(в вашей разметке HTML)

<p class="poem">
    There is a place where the sidewalk ends
    And before the street begins,
    And there the grass grows soft and white,
    And there the sun burns crimson bright,
    And there the moon-bird rests from his flight
    To cool in the peppermint wind.
</p>

Ответ 3

я бы рекомендовал форматировать вывод с помощью css вместо того, чтобы использовать обработку строк на стороне сервера, например .replace,

просто добавьте это свойство стиля для рендеринга многострочных текстов:

.multiline
{
   white-space: pre-line;
}

затем

<div class="multiline">
  my
  multiline
  text
</div>

newlines будет отображаться как br.

Ответ 4

Попробуйте @Html.Raw(Model.Replace("\r\n", "<br />"))

Ответ 5

<pre>@myMultiLineString</pre>

ИЛИ

<span style="white-space:pre">@myMultiLineString</span>

Не нужно делать Html.Encode, как это было сделано по умолчанию

Ответ 6

 [DataType(DataType.MultilineText)]
public your_property {set; get;}

и он будет работать, если вы используете EditorFor()