我正在制作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;
}
有什么想法?
答案 0 :(得分:2)
这是会话的可接受用途,但如果您想要对此设置进行任何类型的实际持久性,则应将其作为属性添加到您的用户实体或使用声明。使用会话时,您必须假设会话可以随时销毁,因此应用程序应该存储在那里。
虽然您无法通过JavaScript直接访问会话,但您可以使用AJAX调用来执行操作,该操作将从会话中检索值并将其作为响应发送回来。但是,除非您希望在请求之间更改此值,否则并不是非常需要这样做。否则,只需在控制器操作或视图中直接使用Session
对象即可确定渲染输出的内容。或者,如果您确实需要了解JavaScript中的值,则可以在页面上设置JavaScript变量(最好在应用程序的命名空间内)或添加隐藏字段或包含可在JavaScript中检索的值的内容
注意:如果您使用AJAX路线,请在MVC Controller
的子项中使用操作,而不是Web API的ApiController
。后者无法访问Session
,因为Web API符合REST,而REST是无状态的。