2012-09-09 13 views
0

在創建我的主頁時,我遇到了以下問題。從數據庫解析字符串到HTML

我有一個數據庫,其中包含來自用戶的評論。此評論應該能夠包含用於格式化和高度靈活性的HTML元素。 (:NTEXT類型):

Hi, I'm a <b>Comment</b> 

代碼在.cshtml文件:

<p>@textfromdb</p> 

顯示在網站上的內容:

嗨,我是

在數據庫單元格文本a <b>評論</b>

什麼應該顯示在websi上TE:

嗨,我是一個評論

是否有可能以某種方式使該字符串爲一個有效的HTML字符串?我遺憾地沒有在Google上找到任何有用的信息,主要原因是我認爲缺乏正確的關鍵字。

感謝您的幫助!

+2

請注意,在您的網站中使用用戶生成的HTML代碼進行unsanitized是一個巨大的安全問題。你永遠不應該允許這個。如果您的用戶應該被允許樣式化他們的評論,您必須明確限制您的用戶可能使用的HTML標籤! – Jan

+0

感謝您的安全建議,這是值得的。但在這種特殊情況下,網站的任何用戶都無法操作或添加數據庫中的任何行,所以只是我此刻正在編輯它的行。我試圖給一些用戶改變他們的文本的可能性。這不是一個評論功能,這個例子有點刺激,對不起。 – phippu

+0

我不是說要添加/刪除行。您的用戶**不能**能夠創建在您的網站上顯示的(unsanitized)HTML代碼。他們可以插入JavaScript或iFrame並從遠程位置加載惡意內容。 – Jan

回答

2

嘗試以下操作:

@Html.Raw(textfromdb) 
+0

謝謝,這正是我所尋找的。 – phippu

0

這可能不是這樣做,因爲(支持什麼和不那麼IM fudgy上)我不剃刀工作的正確方法,但這是一種方法可以做到它在舊式asp.net/C#

所以這裏是我的實現,我使用面板(這是我不知道是否存在於剃鬚刀),當我需要直接從服務器發送HTML到頁面。

服務器端:

PanelID.Controls.Add(new LiteralControl("<p>Hi, I'm a <b>Comment</b></p>")); 

客戶端:

<asp:Panel ID="PanelID" runat="server"></asp:Panel> 

輸出將被

嗨,我是一個評論

如果這是一個糟糕的做法,我只會歡迎一個替代方案(但我還沒有找到更好的方法)。

+0

謝謝你的回答,但我更喜歡丹尼斯特勞布發佈的更簡單的方法。 – phippu