[英]ASP.NET MVC3 Html.Raw, Html.Encode NullReferenceException
[英]ASP.NET MVC Html.Encode - New lines
Html.Encode
似乎只是簡單地調用HttpUtility.HtmlEncode
用它們的轉義序列替換一些html特定字符。
但是,這並沒有考慮如何解釋新行和多個空格(標記空白)。 因此,我為用戶提供了一個文本區域,用於輸入純文本信息塊,然后在另一個屏幕上顯示該數據(使用Html.Encode
),新的行和間距將不會被保留。
我認為有2種選擇,但也許有人會提出更好的建議。
一種選擇是只編寫一個使用HtmlEncode的靜態方法,然后將生成的字符串中的新行替換為<br>
和多個空格的組,並使用
另一種選擇是在我的樣式表中使用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.