0

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

我怎样才能正确地保存这些数据?在普通视图中,我可以将它传递给我的视图模型,但是如何在我的 _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 = "";
    }
}

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

4

2 回答 2

1

There's a useful related question: ASP.NET MVC Razor pass model to layout

于 2012-11-05T17:05:00.883 回答
0

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

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

这绝对不是您会使用 cookie 的目的。

于 2012-11-05T16:59:38.457 回答