我簡化了這個問題,它是最簡單的形式。爲什麼這不會在我的頁面上輸出任何內容?Mvc raw沒有輸出
@if(true){Html.Raw("<a>test</a>");}
編輯
這確實然而工作:
@if (true) { <span>@Html.Raw("<a>test</a>")</span>}
我簡化了這個問題,它是最簡單的形式。爲什麼這不會在我的頁面上輸出任何內容?Mvc raw沒有輸出
@if(true){Html.Raw("<a>test</a>");}
編輯
這確實然而工作:
@if (true) { <span>@Html.Raw("<a>test</a>")</span>}
我相信這是因爲剃刀引擎發生了混亂「是否需要」或「如何應對」與第一您編寫的代碼類型。在Html
語法的開始
@if(true){@Html.Raw("<a>test</a>");}
注意的@
:如果你這樣做,將工作。關於這個,有an explanation here by Scott Guthrie。它總結是這樣的:
並非所有內容的容器塊用標籤元素標籤開始,雖然 並有場景中的剃刀解析器不能隱式檢測 內容塊。
Razor通過使您能夠通過在代碼塊中使用@:字符序列 明確指示內容行的開頭 來解決此問題。 @:序列表示後面的 內容行應被視爲內容塊。
現在我認爲這適用於您的具體問題。
謝謝你解釋它。 – John
歡迎您 –
@if(true){Html.Raw("<a>test</a>");}
上面的行不會給你html輸出,因爲剃刀解析器通過讀取開始和結束字符或HTML元素推斷代碼結束。 因爲您的代碼在if條件中不包含任何html元素,所以解析器會將它作爲表達式,就像我們在控制器中所做的那樣。
@if (true) { <span>@Html.Raw("<a>test</a>")</span>}
這是可行的,因爲@Html.Raw
被包裹在span元素下。
謝謝我懷疑爲什麼會發生這種情況,von訴上面有一個很好的解釋。 – John
嘗試使用MvcHtmlString.Create()代替...雖然我也對此持懷疑態度。通常我在@If分支中使用圍繞呈現代碼的 標籤。我無法給你一個堅實的理由,但這是標準行爲。 –