使用会话来存储复选框的状态

时间:2014-12-02 17:54:27

标签: javascript asp.net-mvc-4 session

我正在制作MVC网络应用。我的主索引页面上需要一个复选框,如果选中则会更新其他页面上的某些选项。我想我可以将此复选框的状态保存到会话中,以便以后可以访问它。

这是正确的方向吗?

另外我认为会话不能用javascript调用,所以我会用AJAX调用来处理它吗?

感谢您在正确的方向上提供任何帮助。

编辑:

此应用根据用户选择的内容向用户显示几个可能的表格。然后可以在单独的页面上更新这些内容。此复选框将过滤掉可能显示在这些其他页面上的一些选项。使用模型不会起作用(我认为),因为我将其他模型发送到这些页面。我想我可以将这个变量添加到每个模型并更新它,但这似乎是一个没有任何实际收益的麻烦,除非我遗漏了一些东西。

编辑2:

这是我到目前为止所拥有的。它似乎正在发挥作用。

$(function () {
    $("#checkBox1").change(function () {
        console.dir($("#checkBox1"));
        var choice = $("#checkBox1")[0].checked;
        console.log(choice);
        $.ajax({
            cache: false,
            type: "POST",
            url: RootDirectory + "Home/SetCheckBoxSession/",
            data: { "choice": choice },
            success: function () {
                alert("Updated session with " + choice);
            },
            error: function (xhr, ajaxOptions, throwError) {
                alert("Error changing session");
            }
        });

    })
})

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public void SetCheckBoxSession(bool choice)
{
    Session["IsCheckBoxSet"] = choice;
}

有什么想法?

1 个答案:

答案 0 :(得分:2)

这是会话的可接受用途,但如果您想要对此设置进行任何类型的实际持久性,则应将其作为属性添加到您的用户实体或使用声明。使用会话时,您必须假设会话可以随时销毁,因此应用程序应该存储在那里。

虽然您无法通过JavaScript直接访问会话,但您可以使用AJAX调用来执行操作,该操作将从会话中检索值并将其作为响应发送回来。但是,除非您希望在请求之间更改此值,否则并不是非常需要这样做。否则,只需在控制器操作或视图中直接使用Session对象即可确定渲染输出的内容。或者,如果您确实需要了解JavaScript中的值,则可以在页面上设置JavaScript变量(最好在应用程序的命名空间内)或添加隐藏字段或包含可在JavaScript中检索的值的内容

注意:如果您使用AJAX路线,请在MVC Controller的子项中使用操作,而不是Web API的ApiController。后者无法访问Session,因为Web API符合REST,而REST是无状态的。