Есть форма блога для поста: Название статьи и тело поста.
@using (Html.BeginForm("PostSave", "Account", FormMethod.Post))
{
@Html.TextAreaFor(x => x.Headline, new { @id= "tw", cols = "40", rows =
"2" })
<br />
<br />
@Html.TextAreaFor(x => x.BodyText, new { @id = "bw", cols = "40", rows =
"10" })
<br />
<br />
<input id="Submit1" class="btn btn-default" type="submit" value="Пост" />
}
Далее при нажатии кнопки вызывается метод в контроллере:
public async Task<IActionResult> PostSave(Post model)
{
db2.Post.Add(new Post { Headline = model.Headline, BodyText =
model.BodyText});
await db2.SaveChangesAsync();
return View("~/Views/Home/Blog.cshtml");
}
Далее при загрузке DOM-дерева автоматом работает код JQuery:
<script type="text/javascript">
function getData(data) {
var url = "/api/Blog"
$.getJSON(url, function (data) {
$("#idfirst").before('<div id="post" class="post">' +
'<div id = "posthead" class= "posthead"></div >' +
'<div id="postbody" class="postbody"></div></div >');
$("#posthead").append('<p>' + data[6] + '</p>');
$("#postbody").append('<p>' + data[7] + '</p>');
});
}
$(document).ready(function () {
getData();
})
Тут всё просто – перед блоком idfirst вставляем подготовленный блок со вложенными блоками для поста, со своими стилями. Тут всё работает. Но проблема в том, что он не сохраняет перенос на след строку.
Так я его вбил: Так я его вижу:
Как это исправить?
Замените в JavaScript:
data[7]
на:
data[7].split('\n').join('<br>')
Либо на:
data[7].split('\n').join('</p><p>')
Дополнение:
Хотя это не входит в ответ на вопрос, но всё же важно – как заметил пользователь Qwertiy: в данных может оказаться произвольный код и поэтому для безопасности лучше записать так:
$("#posthead").append($('<p>').text(data[6].split('\n').join('<br>')));
$("#postbody").append($('<p>').text(data[7].split('\n').join('<br>')));
Либо же, если использовать CSS-свойство white-space
для #posthead
и #postbody
со значениями:
white-space: pre
, white-space: pre-line
или white-space: pre-wrap
то данные из ответа сервера в соответствии с вышеупомянутой безопасностью можно вставлять и так:
$("#posthead").append($('<p>').text(data[6]));
$("#postbody").append($('<p>').text(data[7]));
Перевод строки и так на месте, но стили ему не соответствуют.
Используй white-space: pre-line
или white-space: pre-wrap
для отображения.
$("#posthead").append('<p>' + data[6] + '</p>');
Нельзя так делать - это огромная дыра в безопасности, поскольку в данных может оказаться произвольный код.
Можно переписать так:
$("#posthead").append($('<p>').text(data[6]));
или использовать нормальный шаблонизатор, который умеет экранирование.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Отправить запрос методом POST на сторонний сайт, как это сделать правильно, в форме будет 2-3 поля для заполнения, нужно написать скрипт отправления...
При клике по некоторому элементу управления на экране появляется div c текстом подсказокУ дива есть кнопка "закрыть"
Столкнулся с такой вот проблемойВ скрытом блоке содержаться Slick-slider, после того, как блок активирую, изображения появляются в миниатюрном...