0

私は ASP.NET MVC を使い始めており、javascript と css で構築されたナビゲーションを持っています。ナビゲーションは折りたたむことができるので、折りたたんだときのメニューのサイズはわずか 1cm です。私の問題は、ボタンをクリックしてメニューに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

関連する便利な質問があります: 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 に答える