2015-07-01 153 views
8

我是一名學生,對於ASP.NET MVC來說相當新穎,我來自ASP.NET Web Form。 (習慣了)ASP.NET MVC 5 - 獲取當前視圖的名稱(Razor .cshtml端)

我有一個列表:

<ul class="sidebar bg-grayDark"> 
    <li class="active"> 
     <a href="@Url.Action("Index", "Home")"> 
      <span class="mif-home icon"></span> 
      <span class="title">Home</span> 
     </a> 
    </li> 
    <li class="bg-hover-black"> 
     <a href="@Url.Action("Index", "Product")"> 
      <span class="mif-shop icon"></span> 
      <span class="title">Products</span> 
      <span class="counter">14</span> 
     </a> 
    </li> 
    <li class="bg-hover-black"> 
     <a href="@Url.Action("Index", "Category")"> 
      <span class="mif-flow-cascade icon"></span> 
      <span class="title">Categories</span> 
      <span class="counter">9</span> 
     </a> 
    </li> 
    <li class="bg-hover-black"> 
     <a href="@Url.Action("Index", "User")"> 
      <span class="mif-users icon"></span> 
      <span class="title">Users</span> 
      <span class="counter">1</span> 
     </a> 
    </li> 
</ul> 

我的目標: 通過其觀點被渲染,我要添加「活動」的已被點擊。 例如:我點擊「類別」,然後Home丟失了他的活動課程,並且類別被添加到他的課程中。 (和「bg-hover-black」

我以爲我可以通過檢查實際呈現的視圖來做到這一點,但我不知道該怎麼做。 (我不知道如何檢查呈現實際的觀點,但使用剃刀來檢查的條件是好的)

我用JavaScript第一次嘗試:


    $(function() { 
     $('.sidebar').on('click', 'li', function() { 
      if (!$(this).hasClass('active')) { 
       $('.sidebar li').removeClass('active'); 
       $(this).addClass('active'); 
      } 
     }) 
    }) 

但它不起作用,因爲在頁面加載時,該html被重新渲染爲主動部分的「活動」。 (如果我刪除主頁的「活動」,則除點擊和頁面加載之外,沒有任何內容會被激活)。

你有什麼解決方法嗎?我在網上搜索了很多,但沒有找到任何幫助。

對不起,有任何英文錯誤,我還在學習它:)。

謝謝,

Hellcat8。

+0

該帖子的開頭並未顯示..這裏是: 「大家好, 我是一名學生,對ASP.NET MVC [...]頗爲新穎」 – Hellcat8

回答

6

由於您使用在您的網頁被命名約定控制器後,你可以在剃刀做到這一點,以獲得控制器/網頁名稱:

@{ 
var pageName = ViewContext.RouteData.Values["controller"].ToString() 
} 

<ul class="sidebar bg-grayDark"> 
    <li class="@(pageName == "Home" ? "active" : "")"> 
     <a href="@Url.Action("Index", "Home")"> 
      <span class="mif-home icon"></span> 
      <span class="title">Home</span> 
     </a> 
    </li> 
    <li class="bg-hover-black @(pageName == "Product" ? "active" : "")"> 
     <a href="@Url.Action("Index", "Product")"> 
      <span class="mif-shop icon"></span> 
      <span class="title">Products</span> 
      <span class="counter">14</span> 
     </a> 
    </li> 
    <li class="bg-hover-black @(pageName == "Category" ? "active" : "")"> 
     <a href="@Url.Action("Index", "Category")"> 
      <span class="mif-flow-cascade icon"></span> 
      <span class="title">Categories</span> 
      <span class="counter">9</span> 
     </a> 
    </li> 
    <li class="bg-hover-black @(pageName == "User" ? "active" : "")"> 
     <a href="@Url.Action("Index", "User")"> 
      <span class="mif-users icon"></span> 
      <span class="title">Users</span> 
      <span class="counter">1</span> 
     </a> 
    </li> 
</ul> 

這將設置您的頁面服務器端的活動類,消除需要使用JavaScript做這個客戶端。

+0

非常感謝!這是工作 ! :)還有一件事:你有一些鏈接,我可以有一些有關剃刀可能性的信息? ! 在網絡上,我只有再次找到基本的東西一樣,如果和foreach等.. :( 感謝 – Hellcat8

+0

沒問題哥們,很高興我能幫助:) –

+0

http://stackoverflow.com/a/3389151/1062224 –

2

確認:當用戶點擊該項目時,您正在更改頁面。因爲這個原因,你的javascript將會運行,但是整個頁面被重寫並且你回到了第一個狀態(也就是說,Home中的Home被激活,因爲它在標記中)。

要檢查當前頁面,則可以使用location.href,並將它與href網址相比,這樣的:

$(function() { 
    $("ul.sidebar>li").removeClass("active"); // or just not have active in the markup 
    $("li>a[href=" + location.href + "]").closest("li").addClass("active"); 
}); 

另外,並且這將是更強大的,你可以通過一個令牌(字符串,枚舉或const)在與所述視圖模型,並檢查,例如:

<ul class='sidebar'> 
    <li data-page='home'... 
    ... 
    <li data-page='categories'... 

然後

$(function() { 
    $("li[[email protected]]").addClass("active") 

(或者只是在標記......)

<li data-page='categories' @(Model.PageName == 'Categories' ? "class=active" : "")> 
+1

非常感謝花時間幫助我! :) – Hellcat8

相關問題