2013-12-21 36 views
2

我認爲在Razor中的@意味着C#代碼。所以,像下面我就懶得給另一@Html.Raw()之前,因爲它已經被包裹在C#代碼的代碼:在Html.Raw之前如何放置@?

@if (Session["User"] == null) 
{ 
    Html.Raw("Welcome User <br>"); 
} 

但事實證明,輔助實際需要@之前,以表示其背景爲提到here否則它不會產生任何東西。

有人能解釋爲什麼更詳細嗎?

+0

@ user2864740 - 好點......這不應該是既不DUP的「爲什麼@字符串常量前使用」,也不是「爲什麼@標識符中使用」 ......我已經編輯樣本以避免一個額外的'@'。 –

回答

10

另一篇文章解釋了爲什麼您需要在Html.Row代碼前加上額外的@符號。

基本上,你可以考慮一下這樣的:

  • 第一@if前指出,在代碼中,如果塊是C#代碼,它會被解析爲這樣的。

  • 當C#代碼執行時,Html.Raw(...)會生成一個MvcHtmlString對象,但是您並沒有真正執行任何操作。如果你正在寫在你身後純代碼或許會寫一些代碼到MvcHtmlString發送到響應輸出緩衝器或類似的東西

所以,第二@,你會需要的Html.Raw(..)面前實際上是一種短用手指定你希望函數的結果在輸出上下文中被渲染,而不是簡單地留下懸掛。

一個不同的例子可能會有所幫助。這個例子只與你的Razor問題間接相關 - 關於執行函數和丟棄結果的概念。

比方說,你有如下函數定義:

int Add(int a, int b) 
    { 
     return a + b; 
    } 

現在,你可以調用這個函數是這樣的:

Add(2, 3); 

上面的代碼將執行加法,但結果將是丟棄。你沒有做任何事情。對比,與:

Console.WriteLine(Add(2, 3)); // now the result is being written to the console 
相關問題