2012-11-05 53 views
0

我開始使用ASP.NET MVC,並且我有一個使用javascript和css構建的導航。導航是可摺疊的,所以菜單在摺疊時只需要1釐米。 我的問題是,我需要通過點擊一個按鈕並在菜單上設置一個css類來更改狀態(摺疊/展開)。 但是,當我點擊一個菜單條目頁面重新加載,所以CSS類也會丟失。在mvc中保存數據

我該如何持續保存這些數據?在正常的視圖中,我可以將它傳遞給我的viewmodel,但我怎麼能在我的_layout.cshtml中做到這一點? (我不能在那裏設置一個模型,對吧?)

我試過的是使用jQuery插件「餅乾」,但它只有時有效(我認爲問題是在插件的選項內的某處 - 也許我必須設置一個域或其他...)。此外,如果解決方案不需要用戶允許cookies,那將會很好。

我很高興任何幫助!

編輯: 好吧,我現在嘗試是:

//視圖

@model NHibernateSimpleDemoMVC.Models.MenuModel 
.... 
<a id="togglemenu" /> 

@Html.HiddenFor(x => x.IsCollapsed, new { @id = "collapsedHdn" }) 

... 

<script> 
jQuery('#togglemenu').click(
    function() { 
     if (jQuery("#collapsedHdn").val() == "true") { 
      jQuery("#collapsedHdn").val("false") 
     } else { 
      jQuery("#collapsedHdn").val("true") 
     } 
    }); 

jQuery('#nav > li').click(
    function() { 
     var name = jQuery(this).attr("id"); 
     jQuery("#selectedHdn").val(name); 
    } 
    ); 


jQuery(document).ready(function() { 
    //set selected node 
    if (jQuery("#collapsedHdn").val() == "true") { 
     ... collapse ... 
    } 
    if (jQuery("#selectedHdn").val() != "") { //this is always empty ("") 
     var name = "#" + jQuery("#selectedHdn").val(); 
     jQuery(name).addClass("current"); 
    } 
}); 

</script> 

//模型

public class MenuModel 
{ 
    public bool IsCollapsed { get; set; } 
    public string SelectedEntry { get; set; } 

    public MenuModel(){ 
     IsCollapsed = false; 
     SelectedEntry = ""; 
    } 
} 

...我的隱藏字段似乎不在回發之後保持它們的值...

+1

所以areyou試圖從基頁堅持不同contollers之間的數據? –

+0

不,我有我的_layout.cshtml(基本上我的母版頁),並有一個導航div。此導航是可摺疊的。我的問題是,我需要以某種方式存儲此導航的狀態。所以我需要跟蹤導航是否崩潰或其擴展。 – r3try

回答

0

通常在va在頁面上顯示,導航菜單項指向該頁面。例如標題或類似的東西。

如果存在,那麼通過讀取該值並找到相應的菜單項,可以使用jQuery/Javascript設置css類。

這絕對不是你會使用cookies的東西。