Проблема с разрывом новой строки — C # .NET MVC

#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)
  

Вот руководство