ASP.NET MVC: как отобразить многострочный текст? - PullRequest
11 голосов
/ 23 сентября 2011

Просмотр модели:

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", и это тоже не сработало.

Есть идеи?

Спасибо!

Ответы [ 6 ]

25 голосов
/ 23 сентября 2011

Ответ в том, что вы не сделаете ничего из этого.Это работа вашей таблицы стилей.По сути, визуализируйте содержимое любым удобным способом, например, в <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>
18 голосов
/ 23 сентября 2011

Вы можете попробовать это:

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

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

11 голосов
/ 24 июня 2013

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

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

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

тогда

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

переводы строк будут отображаться как br элементов.

4 голосов
/ 23 сентября 2011

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

3 голосов
/ 04 декабря 2013
<code><pre>@myMultiLineString

ИЛИ

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

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

0 голосов
/ 02 августа 2016
 [DataType(DataType.MultilineText)]
public your_property {set; get;}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...