正如ScottGu在其博客中所說的post«默認情況下,使用@塊發射的內容會自動進行HTML編碼以更好地防止XSS攻擊情況»。 我的問題是:如何輸出一個非HTML編碼的字符串?在剃刀視圖中發出未編碼的字符串
爲了簡單起見,請堅持這個簡單的例子:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
正如ScottGu在其博客中所說的post«默認情況下,使用@塊發射的內容會自動進行HTML編碼以更好地防止XSS攻擊情況»。 我的問題是:如何輸出一個非HTML編碼的字符串?在剃刀視圖中發出未編碼的字符串
爲了簡單起見,請堅持這個簡單的例子:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
這是我最喜歡的辦法:
@Html.Raw("<p>my paragraph text</p>")
來源是菲爾哈克的剃刀語法參考:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
您可以創建MvcHtmlString的一個新實例,它不會得到HTML編碼。
@{
var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}
希望Razor未來會有更簡單的方法。
如果你不使用MVC,你可以試試這個:
@{
var html = new HtmlString("<a href='#'>Click me</a>")
}
新HtmlString是絕對的答案。我們研究了一些其他的剃刀語法變化,但最終沒有一個變得比新的HtmlString短。
然而,我們可能會把它包裝到幫手中。也許......
@Html.Literal("<p>something</p>")
或
@"<p>something</p>".AsHtml()
是否可以添加@ = myString作爲輸出HTML的方式?也許太多閃回WebForms ... – aolde 2010-07-29 15:31:12
我們希望避免在不包含主要用戶案例的地方添加語法結構。大多數情況下,您將使用幫助器方法來構建字符串,並且IHtmlString可以完美地工作。對於那些你需要輸出一個字符串沒有一個幫手奇數的情況下,我們可以提供給你一個方法:@Literal(富)或類似的。 – 2010-08-14 15:50:45
轉變我們的項目到新的Razor視圖引擎時,我遇到了這個問題爲好。我採用的方法稍有不同,因爲我們必須從C#生成JSON數據,並希望在加載頁面時輸出它。
我最終做的是在cshtml文件中實現一個與View並行的RawView。從本質上講,要獲得一個原始字符串,
@(new HtmlString(View.Foo))
// became
@RawView.Foo
這需要對項目佈局的一些變化,所以我就寫了一個博客帖子大約是here。總之,這需要MVC的DynamicViewDataDictionary的重複實現和一個包含RawView的新WebViewPage。我也說幹就幹,實現索引操作上RawView允許
@RawView["Foo"]
在關閉的機會,有人需要遍歷所有的數據和密鑰列表。
閱讀anurse的評論,如果我將它命名爲Literal而不是RawView,它可能會更好。
其實你前人的精力能夠使用'新HtmlString()'在MVC 3,以及因爲該類型是.NET 4. – marcind 2010-07-28 23:19:22
確實!然而,當在一個表達式中輸入所有內容時,我更喜歡MVC。例如。 @ MvcHtmlString.Create(myString的)。個人喜好! – aolde 2010-07-29 08:36:30