在mvc中保存数据

时间:2012-11-05 16:48:01

标签: c# asp.net-mvc

我开始使用ASP.NET MVC,我有一个用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>

//模型

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

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

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

2 个答案:

答案 0 :(得分:1)

有一个有用的相关问题:ASP.NET MVC Razor pass model to layout

答案 1 :(得分:0)

页面上的值与指向该页面的导航菜单项之间通常存在关联。例如,标题或类似的东西。

如果有,那么一旦DOM完全加载,你可以使用jQuery / Javascript设置css类,方法是读取该值并找到相应的菜单项。

这绝对不是您使用Cookie的原因。