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

какие идеи?

спасибо!

6 ответов


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

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

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


ответ в том, что вы ничего этого не сделаете. Это работа вашей таблицы стилей. В принципе, визуализируйте контент любым способом, в <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>

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

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

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

затем

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

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


попробовать @Html.Raw(Model.Replace("\r\n", "<br />"))


<pre>@myMultiLineString</pre>

или

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

нет необходимости делать Html.Кодируйте, как это делается по умолчанию


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

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