2013-04-29 49 views
3

我正在學習MVC 4,因此使用剃刀引擎來渲染我的視圖。請多多包涵:)@ Html.ActionLink()if語句

我有一個導航菜單,看起來像這樣:

enter image description here

而且我希望有一個指向起伏朝其內容的箭頭,當用戶點擊導航中的一個菜單。這裏是代碼:

<li> 
    @Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence") 
    @if() 
    { 
     <span id="triangle"> 
      <img src="~/Images/nav_arrow.png" /> 
      </span> 
     } 
</li> 
<li>@Html.ActionLink("Marketing Services", "MarketingServices", "Marketing")</li> 

現在,我想知道在if語句中寫什麼。我知道我需要鏈接我的箭頭動作鏈接 - 這樣的事情:

@if (@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence")) 
{ 
    <span id="triangle">      
    <img src="~/Images/nav_arrow.png" /> 
    </span> 
} 

任何幫助,將不勝感激。謝謝你的時間。

PS:我的問題有意義嗎?

這是我的觀點:

 <!DOCTYPE html> 

<head> 
     <meta charset="utf-8" /> 
     <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 
     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
</head> 

<body> 
    <div class="WebContent"> 
    <nav> 
     <ul id="menu"> 
      <li> 
       <a href="@Url.Action("Index", "Business_Intelligence")"> 
        <img src="~/Images/myImage-Logo.png" /> 
       </a> 

       @if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence") 
       { 
        <span class="triangle"> 
         <img src="~/Images/nav_arrow.png" /> 
        </span> 
       } 

      </li>        
      <li> 
       @Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence") 

       @if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence") 
       { 
        <span class="triangle"> 
         <img src="~/Images/nav_arrow.png" /> 
        </span> 
       } 

      </li> 
      <li>@Html.ActionLink("Marketing Services", "MarketingServices", "Marketing")</li> 
     </ul> 

    </nav> 

     @RenderSection("featured", required: false) 
     @RenderBody() 
     @Scripts.Render("~/bundles/jquery") 
     @RenderSection("scripts", required: false) 

    <footer> 
      <p>Footer</p> 
    </footer> 

    </div> 

</body> 

和我的CSS:

/* Images 

------------ ----------------------------------------------- */

.triangle{ 
display:block; 
text-align: center; 

}

+0

這有點複雜,你用if語句做什麼?你是否試圖找到是否有人點擊,徘徊,如果鏈接exsists? – Nomad101 2013-04-29 21:27:54

+0

正確!我試圖弄清楚是否有人點擊菜單。 – Oliver 2013-04-29 21:45:21

+0

好吧,這可以使用鏈接的onclick屬性來完成。您可以設置一個函數來在用戶點擊鏈接時調用,例如展開某物或隱藏另一個面板。 – Nomad101 2013-04-29 21:47:07

回答

2

如果我理解正確的話,您可以有效地要檢測的當前頁是否是一個由導航項目掛鉤,如果是這樣,使得在一些額外的標記相應的導航項。對於這一點,你可以使用ViewContext

<li> 
    @Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence") 
    @if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence") 
    { 
     <span id="triangle"> 
      <img src="~/Images/nav_arrow.png" /> 
      </span> 
     } 
</li> 

這將完成的是檢查是否正被Business_Intelligence控制器執行當前操作和 - 如果它是 - 使操作鏈接下方的額外的標記。

請注意,這隻會在第一次加載視圖時呈現箭頭,即如果點擊「商業智能」加載一個新頁面,則該解決方案適合您。如果你需要動態地做到這一點(例如,點擊「商業智能」實際上只是通過jQuery呈現更多內容而不實際刷新頁面),那麼Nomad101的解決方案更合適。

如果您需要比此更精細的粒度,該集合還包括一個"action"密鑰。

+0

這正是我想要做的,因爲我只想在點擊後顯示圖像。我剛剛實施了您的解決方案,但圖像未顯示。你知道什麼可能導致它? – Oliver 2013-04-29 22:17:00

+1

可能是因爲我大寫了「控制器」 - 我認爲它實際上應該都是小寫。如果這不起作用,請嘗試檢查HTML以確保標記實際上不存在。如果沒有,請嘗試在視圖中的某個地方粘貼@ Html.Raw(ViewContext.RouteData.Values [「controller」])來仔細檢查是否存在值(應該在標記中寫出,剃刀聲明)。 – 2013-04-29 22:21:35

+0

我插入了@ Html.Raw(ViewContext.RouteData.Values [「controller」])之後,我可以看到Business_Intelligence顯示。這是一個好兆頭吧?但是,我仍然無法看到箭頭。 – Oliver 2013-04-29 22:30:02

1

你可以使用這個網站助手補充說,要執行,當用戶點擊它的onclick方法的HTML屬性。

@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence", null, new { onclick:"someFunc()" }) 

someFunc()是一個客戶端java腳本函數。如果你願意,這個函數可以很容易地進行爭論,但這取決於你。每次單擊元素時,它都會執行一次。 null值代替ActionLink助手的路由值對象,該值可以控制MVC中的特殊路由值,並且可能非常有用。

另一種方法是將元素設置爲ID並使用jquery來處理事件。像這樣的工作:

jQuery("#Link").on("click", function() { callback }); 
+0

謝謝,我正在調查它 – Oliver 2013-04-29 21:54:09

+0

我只是想說謝謝。我正在追求另一種解決方案,因爲這正是我所尋找的。 再次感謝 – Oliver 2013-04-29 22:32:32

+0

沒問題,我只是誤以爲你想要好運。 – Nomad101 2013-04-29 22:40:00