簡體   English   中英

"ASP.NET MVC 將原始 HTML 從控制器傳遞到視圖"

[英]ASP.NET MVC Passing Raw HTML from Controller to View

這幾天我一直在摸不着頭腦,我不確定這是我的環境問題還是基於 ASP.NET MVC 的代碼本身的問題(盡管我有 5 年的 C# 經驗)。 我正在使用帶有所有補丁的 Win7x64 和 VS 2008 最近的全新安裝。

我將原始 HTML 存儲在數據庫表中,控制器根據我無法控制的一些規則選擇性地加載該表。 不幸的是,當嘗試將值填充到控件中的視圖數據中時,如下所示:

ViewData["HTMLData"] = DAO.HTMLDataGet();

當我看到輸出時,它是轉義/HTML 編碼的。 我嘗試使用以下所有這些似乎都無法解決此問題:

<%: HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString())%>

和...

<%: Server.HtmlDecode(ViewData["HTMLData"].ToString())%>

和...

<%: Html.Raw(ViewData["HTMLData"].ToString())%>

...它可以很好地從數據庫表中獲取原始 HTML,但是無論我嘗試什么,它都會繼續強制執行該爆破編碼。 從我在 MSDN 上閱讀的內容來看,有一個腳注是關於由於 HTML 未正確解碼而導致的問題,其中包含空格(我的就是這樣)。 因為我懷疑我是唯一一個面臨這個問題的人,所以我向你們尋求一些想法。

我打算用正則表達式來進行頁面清理,但我認為最好先從其他人那里得到一些建議,然后再強行使用它。提前致謝。

<%: 表示 “必要時編碼”。 如果你不想那樣,那么懶惰的方法就是使用<%= ,但坦率地說,我建議你把它包裝在IHtmlString ,例如:

string yourEncodedHtml = ...
var html = new MvcHtmlString(yourEncodedHtml);

現在,如果你存儲並顯示它,它應該采取的HTML“原樣”。

嘗試使用: <%=%>

<%= Html.Raw(ViewData["HTMLData"].ToString())%>

<%:%>是ASP.NET 4(和ASP.NET MVC)中HTML編碼輸出的語法

更多細節

如何HTML編碼今天的內容

ASP.NET應用程序(尤其是那些使用ASP.NET MVC的應用程序)通常依賴於使用<%=%> code-nugget表達式來呈現輸出。 今天的開發人員經常在這些表達式中使用Server.HtmlEncode()或HttpUtility.Encode()輔助方法,在輸出呈現之前對輸出進行HTML編碼。

雖然這很好,但它有兩個缺點:

這是一個有點冗長的開發人員經常忘記調用Server.HtmlEncode方法 - 並沒有簡單的方法來驗證它在應用程序中的使用

新的<%:%>代碼塊語法

在ASP.NET 4中,我們引入了一種新的代碼表達式語法( <%:%> ),它可以像<%=%>塊一樣呈現輸出 - 但在執行此操作之前,它還會自動對HTML進行編碼。 這消除了對顯式HTML編碼內容的需要。

我們選擇<%:%>語法,以便快速替換<%=%>代碼塊的現有實例。 它還使您能夠輕松搜索代碼庫中的<%=%>元素,以查找並驗證您在應用程序中未使用HTML編碼的任何情況,以確保您具有正確的行為。

你幾乎用過你嘗試過的東西。 給了我這樣做的想法,這很有效:

Html.Raw(HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString()))

暫無
暫無

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

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