回答
下面的類實現的HtmlHelper那正確編碼文本:
public static class HtmlExtensions
{
public static MvcHtmlString Nl2Br(this HtmlHelper htmlHelper, string text)
{
if (string.IsNullOrEmpty(text))
return MvcHtmlString.Create(text);
else
{
StringBuilder builder = new StringBuilder();
string[] lines = text.Split('\n');
for (int i = 0; i < lines.Length; i++)
{
if (i > 0)
builder.Append("<br/>\n");
builder.Append(HttpUtility.HtmlEncode(lines[i]));
}
return MvcHtmlString.Create(builder.ToString());
}
}
}
它很容易在您的意見中使用:
<%= Html.Nl2Br(Model.MultilineText) %>
或用剃刀:
@Html.Nl2Br(Model.MultilineText)
也許這就是答案:How do you handle line breaks in HTML Encoded MVC view?
或
你可以試試:
Model.Description.Replace(Environment.NewLine, "<br/>");
輸出未編碼的用戶輸入文字是非常危險的。儘管在原始問題中沒有使用編碼,但應該鼓勵編碼。 –
它看起來並不像你」重新嘗試HTML編碼,以便正常替換應該可以正常工作。
<%= Model.Description.Replace(Environment.NewLine, "<br />")%>
輸出未經編碼的用戶輸入文本是非常危險的。儘管在原始問題中沒有使用編碼,但應該鼓勵編碼。 –
你是對的大部分。我認爲這不是一個問題,因爲OP沒有編碼開始。 OP從未指定它是否是管理面板,或者它是匿名用戶輸入。如果它是某種只有管理員訪問權限的CMS系統(可能是少數情況),則不需要對其進行編碼。 –
顯示它回來時,在視圖中,以確保它是安全的,您應該始終編碼用戶輸入的文本。
你可以做的Cybernate建議或者可以把它
public static string EncodedMultiLineText(this HtmlHelper helper, string text) {
if (String.IsNullOrEmpty(text)) {
return String.Empty;
}
return Regex.Replace(helper.Encode(text), Environment.NewLine, "<br/>")
}
所以添加到的HtmlHelper擴展方法,它可以很容易地重新使用在您查看
<%= Html.EncodedMultiLineText(Model.Description) %>
您忘記了編碼。 – goenning
抱歉,鼓勵在我的評論中編碼,然後在我自己的代碼中忽略它。失敗。 –
上面說的答案提供了一個靜態的HTML幫助擴展提供了一個過時的構造函數:
return new MvcHtmlString(builder.ToString());
這條線可以通過以下行來代替代碼:
return MvcHtmlString.Create((builder.ToString()));
發現這個例子的另一個問題。它打破空輸入。可以通過在方法的第一行插入以下代碼來修復:if(text == null)return MvcHtmlString.Create(text); –
非常感謝。我從來不知道它會破裂。 –
感謝您的投票。我現在可以添加評論,而不必將這些無聊的片段發佈爲答案。 –
這適用於我 -
<%= HttpUtility.HtmlDecode(Html.ActionLink( 「AOT < BR />要求#」, 「actionName」))%>
我喜歡使用HtmlExtensions ,Environment.NewLine和Regex,它們有不同的答案,所以我把上面的答案放到一個單一的方法中。
public static MvcHtmlString MultiLineText(this HtmlHelper htmlHelper, string text) {
if (string.IsNullOrEmpty(text)) {
return MvcHtmlString.Create(string.Empty);
}
return MvcHtmlString.Create(Regex.Replace(HttpUtility.HtmlEncode(text), Environment.NewLine, "<br/>"));
}
使用
<%= Html.MultiLineText(Model.MultilineText) %>
或者
@Html.MultiLineText(Model.MultilineText)
對於Asp.net MVC剃刀,我用了Html.Encode阻止XSS攻擊
@Html.Raw(Html.Encode(Model.Description).Replace(Environment.NewLine, "<br />"))
對於一個稍微不同的(和,恕我直言,更好和更安全)的方式g問題,請參閱this answer to a similar question。
基本上,而不是通過將所有新行字符<br>
元素的麻煩去,它是作爲應用下面的CSS的元素,用戶都出現了輸入的文本一樣簡單:
white-space: pre-line
我認爲這answer以一個很好的方式解決了問題,只需使用css:style="white-space: pre-line"
也請檢查:CSS white space property。
- 1. 將ASP.NET MVC轉換爲n層結構
- 2. 將ASP.Net MVC轉換爲N層
- 3. 如何\ n轉換成HTML換行符
- 4. 將HTML轉換成鏈接ASP.NET MVC
- 5. 轉換HTML到PDF在asp.net
- 6. asp.net html轉換
- 7. 需要幫助在ASP.NET MVC中執行從XML到HTML的XSL轉換
- 8. 將AngularJS轉換爲ASP.NET MVC
- 9. 在tinymce中編輯html不會將\ n轉換爲換行符
- 10. 在ASP.Net轉換JSON到C#類MVC
- 11. 將asp.net webform轉換爲mvc
- 12. Excel VBA將HTML換行符(\ r \ n)轉換爲Excel中的換行符
- 13. HTML到iTextSharp行高轉換
- 14. asp.net MVC jquery頁面轉換
- 15. ASP.Net MVC和N層
- 16. 在ASP.NET MVC和C#中將System.Exception轉換爲友好的HTML#
- 17. WebViewPage類如何在ASP.Net MVC中轉換爲html?
- 18. 轉到郎區分「\ n」個和行中斷
- 19. 將asp.net webforms邏輯轉換爲asp.net MVC
- 20. ASP.NET MVC內聯樣式轉換
- 21. 將jQuery Mobile轉換爲ASP.Net MVC表單
- 22. ASP.NET MVC「整潔」Html飛行
- 23. 將C中的\ n轉換爲PHP中的新行
- 24. Data Initializer無法在ASP.NET MVC中轉換?
- 25. ASP.NET MVC中的時區轉換
- 26. ASP.NET MVC中的HTML
- 27. ASP.NET將HTML轉換爲PDF
- 28. C#.NET RTF到HTML轉換器和HTML到RTF轉換器庫
- 29. 將字符串轉換爲表ASP.Net MVC
- 30. 轉換計數器(n)到n行配置單元
它是如何顯示的? – smartcaveman
在一行中。沒有'
'被創建。 –
其實,這裏接受的答案提供了一個更好的實現: http://stackoverflow.com/questions/4220381/replace-line-break-characters-with-br-in-asp-net-mvc-razor-view – Nullius