2012-11-05 6 views
0

Je commence à utiliser ASP.NET MVC et j'ai une navigation qui est construite avec javascript et CSS. La navigation est rétractable, de sorte que le menu ne prend que 1cm quand il est effondré. Mon problème est que j'ai besoin de changer l'état (réduit/développé) en cliquant sur un bouton et en définissant une classe css dans le menu. Mais quand je clique sur une entrée de menu, la page est rechargée et la classe css se perd aussi.données persistantes dans mvc

Comment puis-je conserver ces données correctement? Dans les vues normales, je pourrais le passer à mon viewmodel, mais comment puis-je le faire dans mon _layout.cshtml? Ce que j'ai essayé utilisait le plugin jquery "cookies" mais cela ne fonctionne que parfois (je pense que le problème est quelque part dans les options du plugin - peut-être que je dois définir un domaine ou quelque chose ...). De plus, il serait bien que la solution n'oblige pas l'utilisateur à autoriser les cookies.

Je suis content de vous aider!

modifier: ok, ce que j'ai essayé est maintenant:

// vue

@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> 

// le modèle

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

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

... mes champs cachés semblent pas garder leur valeur après la publication ...

+1

si areyou essayant de maintenir les données entre différentes contollers à partir d'une page de base ?? –

+0

non, j'ai mon _layout.cshtml (essentiellement ma page maître) et il y a un div avec une navigation. cette navigation est pliable. Mon problème est, que j'ai besoin de stocker l'état de cette navigation en quelque sorte. donc j'ai besoin de garder une trace de si la navigation est effondrée ou si elle est élargie. – r3try

Répondre

0

Il y a généralement une corrélation entre Lue sur la page et l'élément de menu de navigation pointant vers cette page. Par exemple un titre ou quelque chose comme ça. Si c'est le cas, vous pouvez utiliser jQuery/Javascript pour définir la classe CSS une fois que le DOM est entièrement chargé en lisant cette valeur et en trouvant l'élément de menu correspondant.

Ce n'est certainement pas quelque chose que vous utiliseriez des cookies.

Questions connexes