2011-03-27 126 views
2

當我使用partial view(MVC3/Razor)時,會出現這個問題,但我相信 - 這是清晰的Razor語法問題,不直接與局部視圖相關。 所以 - 我有局部視圖Menu.cshtml全標記爲:ASP.NET MVC 3剃刀語法問題

@model IEnumerable<SportsStore.WebUI.Models.NavLink> 
@foreach(var link in Model) 
{ 
    @Html.RouteLink(link.Text, link.RouteValues); 
} 

沒問題 - 「家長」視圖叫它@ {Html.RenderAction(「菜單」,「導航」);}和所有的工作作爲魔術。 但是,如果我將編輯Menu.cshtml爲:

@model IEnumerable<SportsStore.WebUI.Models.NavLink> 
@foreach(var link in Model) 
{ 
    Html.RouteLink(link.Text, link.RouteValues); 
} 

(!見 - NO '@' Html.RouteLink)之前都只是朗聲道:現在@ {Html.RenderAction( 「菜單」,「導航「);}輸出完全是空的,沒有一個HTML標籤。

想知道 - 兩段代碼有什麼區別?我假設@之前foreach也自動「落入」並適用於Html.RouteLink以及?所以 - 我錯了嗎?

+0

你先生,是我的英雄。我正在通過看起來同樣的SportsStore文章,但我正在轉換到VB.Net。 C#和VB之間的轉換通常是微不足道的,但使用Razor可能會非常棘手。我在RouteLink中遇到了同樣的問題,不能創建輸出,看起來VB.Net遭受同樣的缺陷(閱讀:應用相同的邏輯)......我添加了「@」,並且所有的事情都再次被點擊了。謝謝@Smarty – Smudge202 2011-08-03 12:25:11

回答

3

語句之前的@使得它被寫入輸出流。當你刪除它時,你所做的只是調用Html對象的方法調用。

@操作者的目的是雙重的。它可以用來將輸出表達式輸出到響應流中,就像您在第一個示例中看到的那樣。另一個功能是啓動一個代碼塊。您可以看到代碼示例中使用的第二種行爲:@foreach(var link in Model)

+0

就是這樣!現在我對@運營商充滿信心。 :) – Smarty 2011-03-28 11:02:44

3

Html.RouteLink方法僅返回包含鏈接的IHtmlString;它不會做任何其他事情。

當您編寫@Html.RouteLink(...)時,您將打印此頁面的鏈接。
當你編寫Html.RouteLink(...)時,你在調用方法時沒有對鏈接做任何事情。
因此,沒有任何反應。

+0

非常好的解釋,非常感謝!這是一個遺憾,我不能用綠色標記標記答案。 – Smarty 2011-03-28 11:02:25