私は 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 = "";
}
}
...隠しフィールドは、ポストバック後に値を保持していないようです...