簡體   English   中英

ASP.NET MVC Html.Encode - 新行

[英]ASP.NET MVC Html.Encode - New lines

Html.Encode似乎只是簡單地調用HttpUtility.HtmlEncode用它們的轉義序列替換一些html特定字符。

但是,這並沒有考慮如何解釋新行和多個空格(標記空白)。 因此,我為用戶提供了一個文本區域,用於輸入純文本信息塊,然后在另一個屏幕上顯示該數據(使用Html.Encode ),新的行和間距將不會被保留。

我認為有2種選擇,但也許有人會提出更好的建議。

一種選擇是只編寫一個使用HtmlEncode的靜態方法,然后將生成的字符串中的新行替換為<br>和多個空格的組,並使用&nbsp;

另一種選擇是在我的樣式表中使用white-space: pre屬性 - 但是我不確定當Html幫助方法包含新行和Tab鍵以使頁面源非常漂亮時是否會產生副作用。

是否有第三個選項,如全局標志,事件或方法覆蓋,我可以用來改變html編碼的方式而不必重做html幫助器方法?

HtmlEncode僅用於編碼以HTML格式顯示的字符。 它特別不編碼空白字符。

我會選擇你的第一個選項,並使其成為HtmlHelper的擴展方法。 就像是:

public static string HtmlEncode(this HtmlHelper htmlHelper,
                                string text, 
                                bool preserveWhitespace)
{
    // ...
}

您可以使用String.Replace()來編碼換行符和空格(如果需要更好的匹配,則使用Regex.Replace )。

使用style="white-space:pre-wrap;" 為我工作。 根據這篇文章

如果您使用剃刀,您可以:

@MvcHtmlString.Create(Html.Encode(strToEncode).Replace(Environment.NewLine, "<br />"))

在您的視圖中,或在您的控制器中:

HttpServerUtility httpUtil = new HttpServerUtility();
MvcHtmlString encoded = httpUtil.HtmlEncode(strToEncode).Replace(Environment.NewLine, "<br />");

我沒有測試控制器方法,但它應該以相同的方式工作。

將輸出放在<pre></pre>和/或<code></code>塊中。 例如:

<pre>@someValue</pre> / <code>@someValue</code>

在現有div上使用等效的css:

<div style="white-space:pre-wrap;">@someValue</div>

取決於您是否需要語義標記或是否要使用css。 我覺得這些都是不是插入整潔<br/>標簽。

    /// <summary>
    /// Returns html string with new lines as br tags
    /// </summary>
    public static MvcHtmlString ConvertNewLinesToBr<TModel>(this HtmlHelper<TModel> html, string text)
    {
        return  new MvcHtmlString(html.Encode(text).Replace(Environment.NewLine, "<br />"));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM