打破新线问题 - C#.NET MVC

时间:2011-05-10 11:52:09

标签: asp.net-mvc entity-framework line-breaks

今天天气真好!但是...... :) 我有以下问题:我有一个控制器,用于更新Mysql DB中的type_text字段。用户在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("\r\n", "<br/>").Replace("\r", "<br/>");

    comments updateCommnets = db.comments.SingleOrDefault(d => d.id == id && d.commenterName == Commenter);
    updateCommnets.comment = formValue;
    db.SaveChanges();

    return formValue;
}

这让我疯狂了2天......

有人可以帮帮我吗?非常感谢!

已更新

  • 我使用jeditable执行内联编辑。发布字符串示例:value = Some + text%0ASome2 + text2

2 个答案:

答案 0 :(得分:6)

我会将文本存储在数据库中,而不会将\r\n转换为<br/>

[Authorize]
[HttpPost]
public ActionResult EditComment(string value, long id)
{
    var commenter = User.Identity.Name;
    var updateCommnets = db.comments.SingleOrDefault(d => d.id == id && 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 :(得分:4)

不要转换发送到数据库的文本。 使用:

@MvcHtmlString.Create(value)

这是manual