簡體   English   中英

ASP.NET MVC Razor無法編碼html

[英]Asp.net MVC Razor not encoding html

我的理解是Razor標記將對html字符串進行編碼,但是我嘗試在MVC視圖中使用以下代碼對其進行測試,但未對html字符串進行編碼。

盡管第一個編碼的字符串由於未由Razor引擎處理而表現正確,但是第二個字符串未由Razor編碼,並且最后一個字符串開頭的<>部分也未被Razor編碼。

問題 :為什么Razor不能編碼第二和第三字符串,或者我缺少有關Razor如何呈現html字符串的信息?

MVC視圖中的剃刀標記

&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
<br />
@("<script type='text/javascript'></script>")
<br />
@("<>&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;")

以上Razor標記的渲染

剃刀未編碼html

更新1

我相信正在發生以下情況,但不能確定(也就是說,Razor正在對內容進行編碼,但對於查看瀏覽器呈現版本的用戶而言並不明顯)

我想,剛過第一線br是開頭@正在被剃刀編碼,然后在瀏覽器對其進行解碼。 同樣,第二個br在第二個br之后的第三行由Razor進行編碼,而已經編碼的部分則被加倍編碼,因此當瀏覽器對其進行解碼時,它仍保持為單個編碼,但<>是單編碼的,因此它被瀏覽器解碼為<> 聽起來對嗎?

更新2

當我在Chrome開發工具中查詢響應輸出時,確實表明Razor正在用括號對字符串進行編碼。 Chrome開發者工具中針對該請求的輸出如下。 因此,我在UPDATE 1中提到的是實際發生的情況。 最后一個字符串被雙重編碼為&gt; 顯示為&amp;gt; 並且第一個字符串被單獨編碼。

因此,我對UPDATE 1中發生的事情100%正確。

&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
<br />
&lt;script type=&#39;text/javascript&#39;&gt;&lt;/script&gt;
<br />
&lt;&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;

如果要將字符串(包含html)呈現為html而不是字符串,請使用@Html.Raw函數

來自MSDN @Html.Raw返回未經HTML編碼的標記。

這會將html呈現為文本

&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

這將呈現為html並解析為html文檔

@Html.Raw("<script type='text/javascript'></script>")

這將按原樣呈現字符串

@Html.Raw("<>&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;")

如果您的查詢已解決,請告訴我,

暫無
暫無

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

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