我在我的ASP MVC 5网站的NavBar元素中有一个复选框。该复选框的状态将用于每个页面,以确定网格是否显示除活动记录以外的非活动记录。如何从jQuery设置控制器或全局变量的属性?
我有一个静态类,我试图用_Layout.cshtml写一些jQuery的静态类,这样我的每个控制器就可以检查那里的Index()方法。
我尝试了下面,但后来我意识到,它不会工作,因为一个是客户端和其他服务器。
那么,有没有办法做到这一点或类似的东西?
_Layout.cshtml(HTML)
<div class="nav pull-right checkbox navbar-btn">
@Html.CheckBox("ShowInactive", false) Show Inactive
</div>
_Layout.cshtml(JS,最底部)
<script type="text/javascript">
$(document).ready(function() {
$("#ShowInactive").prop("checked", @HttpContext.Current.Application["ShowInactive"]);
$("#ShowInactive").click(function() {
if (this.checked) {
@HttpContext.Current.Application["ShowInactive"] = true;
}
else
{
@HttpContext.Current.Application["ShowInactive"] = false;
}
//This is to make the grid reload after the checkbox is changed.
location.reload();
});
});
</script>
GlobalVariables.cs
public static class GlobalVariables
{
public static bool ShowInactive
{
get { return (bool)HttpContext.Current.Application["ShowInactive"]; }
set { HttpContext.Current.Application["ShowInactive"] = value; }
}
}
您正在将服务器端代码与客户端代码混合在一起,当您试图更改客户端代码中的服务器端值时,您的脚本将不起作用。我要做的是在cookie上设置一个ShowInactive值(如果你想持久化),然后在服务器端读取它,然后你的客户端代码只需要更新cookie值并重新加载页面。 – Alberto
@Alberto是的,我意识到我正在混合这两个,这就是为什么它不起作用。我只是不知道该做什么不同。我会研究cookie的想法,谢谢。 –
你需要一种方法来坚持从客户端的变化,并阅读它的服务器端,你可以使用cookie,httpheader,查询字符串,这取决于您的需求,如果您需要坚持用户选择我会去的cookie,然后在服务器端,只需要更改ShowInactive的getter,然后在客户端加载页面时尝试读取cookie并设置复选框值,以及用户单击它时更改cookie值并重新加载。 – Alberto