2011-08-17 59 views
0

這可能是一個簡單的疏忽,但我沒有看到問題,所以我想我會尋求一些快速幫助。我對MVC(和Razor)也有些陌生,所以也可能與它有關。基本上,這是我的Razor視圖中的內容,它爲導航欄呈現一些列表項。我只是試圖在元素上設置一個「selected」類,如果(根據Controller名稱)它是被請求的頁面。嘗試檢查時Html.ActionLink沒有輸出控制器名稱

<li>@{ if(Html.ViewContext.RouteData.Values["controller"].ToString() == "AdminHome") 
     { 
       Html.ActionLink("Admin Home", "Index", "AdminHome", null, new { @class = "selected" }); 
      } 
      else{ 
       Html.ActionLink("Admin Home", "Index", "AdminHome"); 
      } 
     } 
</li> 

我得到的結果只是一個空列表項元素:<li></li>

任何想法我做錯了嗎?這只是一個語法問題嗎?

回答

2

您需要在Html.ActionLink之前加@的前綴。否則,MVC將此視爲普通方法調用,而不是輸出html的方法。

<li> 
@if(Html.ViewContext.RouteData.Values["controller"].ToString() == "AdminHome"){ 
     @Html.ActionLink("Admin Home", "Index", "AdminHome", null, new { @class = "selected" }); 
} 
else{ 
     @Html.ActionLink("Admin Home", "Index", "AdminHome"); 
} 

</li> 
+0

謝謝 - 就是這樣。由於它位於@ {}塊內,我沒有意識到它仍然需要@字符。你的解釋是區分html輸出和普通的方法調用,這對我來說實際上是新聞,因爲我仍然是一名Razor新手。 – jamauss

0

萬一比較路線名稱等鈍感 String.Equals(Html.ViewContext.RouteData.Values [ 「控制器」]。的ToString(), 「AdminHome」 ,, StringComparison.CurrentCultureIgnoreCase) 因爲路徑名可以是在任何情況。這是用戶在url中輸入的內容。 例如在url www.yourdomain.com/AdminHome/Index(控制器名稱是AdminHome和控制器將是AdminHomeController) 但URL www.yourdomain.com/adminhome/index(控制器名稱是adminhome,控制器將是AdminHomeController )

希望這會有所幫助。

相關問題