2011-05-10 52 views
1

今天是美好的一天!但是... :) 我有以下問題:我有一個控制器更新Mysql數據庫中的type_text字段。用戶在texarea中鍵入文本,點擊「更新」,並且,哦,魔術,文本被髮布到數據庫。但是不休息......破解新行問題 - C#.NET MVC

在控制器我有:

[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進行在線編輯。後字符串的示例:值=有些+文本%0ASome2 + text2的

回答

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) 
+0

感謝您的幫助!但仍然無法正常工作......我更新了我的文章 – 2011-05-10 12:24:56

+0

@ evgeniy.labusnkiy中的信息,如果您的請求包含危險字符,您可以使用'[ValidateInput(false)]'屬性修飾您的控制器操作。如果這是一個ASP.NET 4.0應用程序,則還需要在web.config中添加''。 – 2011-05-10 12:31:25

+0

有幫助! :) 非常感謝! – 2011-05-10 12:42:28

4

不要轉換髮送到數據庫中的文本。 用途:

@MvcHtmlString.Create(value) 

這裏的manual

+1

或者:@ Html.Raw(value) – 2011-05-10 12:14:55