簡體   English   中英

剃刀-無需使用HTML助手即可編寫未編碼的內容

[英]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.

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