C# mvc中的数据持久化

C# mvc中的数据持久化,c#,asp.net-mvc,C#,Asp.net Mvc,我开始使用ASP.NETMVC,我有一个用javascript和css构建的导航。导航是可折叠的,因此菜单折叠时仅需1厘米。 我的问题是,我需要通过单击按钮并在菜单上设置css类来更改状态(折叠/展开)。 但是当我点击菜单项时,页面会被重新加载,因此css类也会丢失 如何正确保存这些数据?在普通视图中,我可以将其传递给我的viewmodel,但如何在我的_layout.cshtml中实现这一点?(我不能在那里设置模型,对吗?) 我试着使用jquery插件“cookies”,但它只在某些时候起作用

我开始使用ASP.NETMVC,我有一个用javascript和css构建的导航。导航是可折叠的,因此菜单折叠时仅需1厘米。 我的问题是,我需要通过单击按钮并在菜单上设置css类来更改状态(折叠/展开)。 但是当我点击菜单项时,页面会被重新加载,因此css类也会丢失

如何正确保存这些数据?在普通视图中,我可以将其传递给我的viewmodel,但如何在我的_layout.cshtml中实现这一点?(我不能在那里设置模型,对吗?)

我试着使用jquery插件“cookies”,但它只在某些时候起作用(我认为问题出在插件的选项范围内-可能我必须设置一个域或其他东西…)。此外,如果解决方案不要求用户允许cookie,那就更好了

我很高兴能得到任何帮助

编辑: 好的,我现在尝试的是:

//景色

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

。。。我的隐藏字段在回发后似乎没有保留其值…

页面上的值与指向该页面的导航菜单项之间通常存在关联。例如头衔之类的

如果有,那么您可以使用jQuery/Javascript在DOM完全加载后通过读取该值并查找相应的菜单项来设置css类


这绝对不是您使用Cookie的目的。

有一个有用的相关问题:

那么您是否试图从一个基本页在不同的控制器之间持久化数据?不,我有我的_layout.cshtml(基本上是我的母版页),并且有一个带有导航的div。此导航可折叠。我的问题是,我需要以某种方式存储此导航的状态。所以我需要跟踪导航是折叠还是扩展。哦,谢谢。。渲染似乎是一个很好的方法。我明天会调查这件事。谢谢你迄今为止的帮助!
public class MenuModel
{
    public bool IsCollapsed { get; set; }
    public string SelectedEntry { get; set; }

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