2011-03-11 260 views
18

我正在使用以下內容使文本輸出在<textarea>HTML元素中輸入的換行符。顯示換行符asp.net mvc剃刀

MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />")) 

有沒有更好的方法來做到這一點?

+0

我真的不知道這個幫助器如何輸出任何換行符,因爲您正在用空格替換換行符。 –

+0

@Darin - 我的部分副本/粘貼很差,已更新。 – raklos

+0

dup http://stackoverflow.com/questions/5032097/asp-net-mvc-convert-n-new-line-to-html-breaks – BlackTigerX

回答

22

您的代碼容易受到XSS攻擊,因爲它不會對HTML文本進行編碼。我建議你如下:

var result = string.Join(
    "<br/>", 
    Model.Post.Description 
     .Split(new[] { Environment.NewLine }, StringSplitOptions.None) 
     .Select(x => HttpUtility.HtmlEncode(x)) 
); 
return MvcHtmlString.Create(result); 

,然後在你的看法,你可以放心地:

@Html.SomeHelper() 
0

也許你可以輸出<之前的文本>標記。

54

有它採用CSS white-space property一個更好的/真棒的解決方案:

使用這個你避免Cross-site scripting (XSS)漏洞...

<p style="white-space: pre-line">@Model.Message</p> 

W像ASP.NET MVC Razor引擎的魅力一樣。

+2

這應該是事實上被接受的答案。因爲op要求更好的方式! – rjso

0

這是爲我工作。

<p class="message"> 
@Html.Raw("<p>" + Model.Text + "</p>") 
</p> 

string Model.Text裏面有< br />標籤。

+1

這對XSS攻擊是開放的。將''放入你'Model.Text'中,你有一個漏洞。 – trailmax

0

這是我的解決方案。

@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline)) 

當然,您將不得不添加以下使用正則表達式工作的語句。

@using System.Text.RegularExpressions 

希望它對某人有用。