2010-09-27 93 views
2

在我的ASP.Net MVC視圖中,我有一個菜單。該菜單由許多父項目組成,子項目(錨標籤)位於下方。菜單狀態 - ASP.Net MVC

我正在使用JQuery切換菜單項打開和關閉,因爲用戶點擊它們。

不幸的是,一旦用戶點擊一個錨標籤並被髮送到另一個頁面,菜單狀態就會丟失,菜單又回到關閉狀態。

現在,如果這是「正常的」ASP.Net我會堅持菜單狀態信息到ViewState,並存儲信息的方式。

是否有可能在MVC中做類似的事情?這是我工作過的第一個MVC項目,所以請和我一起溫柔!

回答

1

因此,讓我先確保我正確理解你。

用戶將點擊一個菜單項,這會將他帶到另一個頁面。當他到達該頁面時,您想要菜單反映他在該頁面上的事實?正確?

這聽起來不太複雜。我以爲菜單是一個局部視圖 - 這樣你會使它是這樣的:

<div id="menu"> 
    <% Html.RenderPartial("Menu"); %> 
</div> 

這樣的觀點就已經知道哪個菜單項觸發它。例如,如果用戶點擊Widgets-> New,則可能會返回NewWidget.aspx視圖,並且它會知道要突出顯示的菜單項是Widgets-> New。因此,您只需使用overload for RenderPartial指定要突出顯示的菜單項的名稱或ID。

<div id="menu"> 
    <% Html.RenderPartial("Menu", "newWidgetLink"); %> 
</div> 

如果它不是一個視圖已經知道要突出哪一個菜單項的情況下,你將需要通過菜單項的ID與聯繫。所以你的鏈接世代看起來是這樣的:

Html.ActionLink("Menu Item Text", 
       "Controller name goes here", 
       "Action name goes here", 
       new { menuItem = "menuItemId goes here" }, 
       null 
       ) 

然後你的動作將需要處理這個參數。最簡單的方法是取參數並將其添加到ViewData中。然後菜單將檢查ViewData中MenuItem的ID以突出顯示。

0
+0

如果我們仍然想要激發視圖狀態,那麼來到mvc有什麼意義呢? – 2010-09-27 19:24:15

+0

我想知道同樣的事情,所以不要問我,我不是那個問這個問題的人。如果你喜歡,你可以發表評論的問題... – EKet 2010-09-27 19:39:53

+0

說實話,我真的不想模擬ViewState。我之所以發佈是因爲我想發現人們在像MVC這樣的「無狀態」環境中如何做這種事情。當我稍後有機會時,我會編輯這個問題,讓事情變得更加清晰! – NeilD 2010-09-28 14:05:04