在我的场景中替代会话变量

时间:2013-05-15 02:27:49

标签: javascript asp.net-mvc

我有一个迷你视图,弹出并弹出用户点击。它必须在页面之间保持其状态。如果用户打开迷你视图并转到另一个页面并回来,它应该是打开的。我使用会话变量完成了这个..代码是:

HTML:

<input type="hidden" value="@Session["miniviewstatus"]" id="miniviewstatus" />

使用Javascript:

$(".pullout_ico").click(function() {
        var url = "/StudentInformation/getminiviewstatus";
        $.post(url, { status: "true" }, function (data) {
            openMiniView();
        });
    });
    $(".pullout_button").click(function() {
        var url = "/StudentInformation/getminiviewstatus";
        $.post(url, { status: "false" }, function (data) {
            closeMiniView();
        });

    });
    var status = $("#miniviewstatus").val();
    if (status == "true") {
        openMiniView();
    }
    if (status == "false") {
        closeMiniView();
    }
    function openMiniView() {
            $(".pullout_block").show(250);
            $(".pullout_ico").hide(100);
            $(".left_content").removeClass("bigger_left_content");
    }
    function closeMiniView() {
            $(".pullout_ico").show(100);
            $(".pullout_block").hide(250);
            $(".left_content").addClass("bigger_left_content");
    }
};

studentinformation控制器基本上有getminiviewstatus设置字符串值。现在,它工作正常,但我不喜欢这样。无论如何,我可以在dom load之间存储状态??

1 个答案:

答案 0 :(得分:0)

正如ravi在评论中回答的那样,当在客户端使用js和做事时,cookie是一个很好的解决方案。为了提供更多细节,我将使用jquery-cookie插件来获取和设置cookie。然后我会将您的代码更改为以下内容,并消除服务器端对您的ajax操作的支持。

$(".pullout_ico").click(function() {
    $.cookie("miniviewstatus", true);
});
$(".pullout_button").click(function() {
    $.cookie("miniviewstatus", false);
});

var status = $.cookie("miniviewstatus");
if (status) {
    openMiniView();
} else {
    closeMiniView();
}

function openMiniView() {
    $(".pullout_block").show(250);
    $(".pullout_ico").hide(100);
    $(".left_content").removeClass("bigger_left_content");
}

function closeMiniView() {
    $(".pullout_ico").show(100);
    $(".pullout_block").hide(250);
    $(".left_content").addClass("bigger_left_content");
}