#asp.net-mvc #entity-framework #line-breaks
#asp.net-mvc #entity-framework #разрывы строк
Вопрос:
Сегодня хороший день! Но … 🙂 У меня следующая проблема: у меня есть контроллер, который обновляет поле type_text в базе данных Mysql. Пользователь вводит текст в texarea, нажимает «Обновить» и, о чудо, текст публикуется в базе данных. Но без перерыва…
В контроллере у меня есть:
[Authorize]
[HttpPost]
public string EditComment(FormCollection formValues)
{
var Commenter = User.Identity.Name;
Int64 id = Convert.ToInt64(Request.Form["id"]);
string formValue = Request.Form["value"];
formValue = formValue.Replace("rn", "<br/>").Replace("r", "<br/>");
comments updateCommnets = db.comments.SingleOrDefault(d => d.id == id amp;amp; d.commenterName == Commenter);
updateCommnets.comment = formValue;
db.SaveChanges();
return formValue;
}
Это сводит меня с ума на 2 дня…
Кто-нибудь может мне помочь? Большое спасибо!
ОБНОВЛЕНО
- Я использую jeditable для выполнения встроенного редактирования. Пример строки post: значение=Some text
Some2 text2
Ответ №1:
Я бы сохранил текст как есть в базе данных без преобразования rn
в <br/>
:
[Authorize]
[HttpPost]
public ActionResult EditComment(string value, long id)
{
var commenter = User.Identity.Name;
var updateCommnets = db.comments.SingleOrDefault(d => d.id == id amp;amp; d.commenterName == commenter);
updateCommnets.comment = value;
db.SaveChanges();
return Content(value, "text/plain");
}
Затем я бы написал пользовательский HTML-помощник для форматирования значений в представлении, если необходимо, чтобы показать эти комментарии.
public static MvcHtmlString FormatComment(this HtmlHelper html, string comment)
{
if (string.IsNullOrEmpty(comment))
{
return MvcHtmlString.Empty;
}
var lines = comment
.Split(
new string[] { Environment.NewLine },
StringSplitOptions.None
)
.Select(x => HttpUtility.HtmlEncode(x))
.ToArray();
return MvcHtmlString.Create(string.Join("<br/>", lines));
}
и затем в представлении:
@Html.FormatComment(Model.Comment)
Комментарии:
1. спасибо за помощь! но все еще не работает … я обновил информацию в своем сообщении
2. @evgeniy. лабуснкий, если ваш запрос содержит опасные символы, вы могли бы украсить свое действие контроллера
[ValidateInput(false)]
атрибутом. И если это ASP.NET приложение 4.0, которое вам также необходимо добавить<httpRuntime requestValidationMode="2.0" />
в web.config.3. Я рекомендую использовать
<location>
around<httpRuntime requestValidationMode="2.0" />
, чтобы не включать его для всего вашего сайта.
Ответ №2:
Не преобразовывайте текст, который отправляется в базу данных. Использовать:
@MvcHtmlString.Create(value)
Вот руководство