[英]Razor - write something unencoded without using html helper
我正在尋找一種在剃刀視圖中寫入值,不對其進行編碼以及不使用Html Helper的方法。
我在一個混合網站中渲染視圖,在該網站中我以編程方式解析了我的View,如下所示:
string html = "<html>@("Write something <strong>unencoded</strong>"</html>")
html = Razor.Parse<TModel>(html, model);
所以從本質上講,我的html變量包含一個包含razor c#代碼的模板。 因為我正在這樣編譯視圖,所以我無法訪問Html幫助器(本文中接受的答案表明確實如此: 如何在ASP.NET MVC 3中將Razor視圖呈現為字符串? )
但是,我的html變量也包含如下語句:
@Html.Raw("<strong>This should be printed unencoded</strong>")
這不起作用,但給出“ HTML在此上下文中不可用”。
如何實現相同的行為? 使用Response.Write會給出完全相同的錯誤。
還有其他方法嗎?
注意:這是一個混合網站,同時包含經典的ASP Web表單以及一些較新的Web API和MVC內容。 我正在使用的視圖無法通過常規MVC方式訪問。
HtmlString類型的字符串應該適合您。
表示不應再次編碼的HTML編碼的字符串。
內聯創建這樣的字符串的示例(通常,在Model
設置的“ Model
您會擁有這樣的值):
@(new HtmlString("<strong>This should be printed unencoded</strong>"))
我花了一些時間才弄清楚,但這是最終的解決方案(對我有用,但有一些安全隱患,請繼續閱讀!)
這樣編譯您的視圖
var config = new TemplateServiceConfiguration();
config.EncodedStringFactory = new RawStringFactory();
var service = RazorEngineService.Create(config);
html = service.RunCompile(html, "templateNameInTheCache", null, model);
如您所見,我使用RawStringFactory
來確保完全不對HTML進行編碼。 當然,為了安全起見,MVC會自動將HTML編碼,因此這樣做不是很安全。 僅當您100%確定整個Razor視圖中的所有輸出都是安全的時,才執行此操作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.