2016-05-05 96 views
0

我在我的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; } 
    } 
} 
+0

您正在将服务器端代码与客户端代码混合在一起,当您试图更改客户端代码中的服务器端值时,您的脚本将不起作用。我要做的是在cookie上设置一个ShowInactive值(如果你想持久化),然后在服务器端读取它,然后你的客户端代码只需要更新cookie值并重新加载页面。 – Alberto

+0

@Alberto是的,我意识到我正在混合这两个,这就是为什么它不起作用。我只是不知道该做什么不同。我会研究cookie的想法,谢谢。 –

+1

你需要一种方法来坚持从客户端的变化,并阅读它的服务器端,你可以使用cookie,httpheader,查询字符串,这取决于您的需求,如果您需要坚持用户选择我会去的cookie,然后在服务器端,只需要更改ShowInactive的getter,然后在客户端加载页面时尝试读取cookie并设置复选框值,以及用户单击它时更改cookie值并重新加载。 – Alberto

回答

-1

使用此:

document.getElementById('ShowInactive').checked = true; 

OR

$('#ShowInactive').attr('checked', 'checked'); 

OR

$("#ShowInactive").prop("checked", true); 
+0

对不起,我很困惑。我可以使用'.prop'和'this.checked'来设置和获取Javascript中复选框的值,就像我所显示的那样。我的问题是从静态类文件中设置一个值。像全局变量或控制器。 –

-1
$(document).ready(function() { 

$( “#ShowInactive”)丙( “选中”,真正的); });

+0

我没有关注如何让我在服务器端的静态类中设置一个值?就像控制器属性一样。我已经显示的代码已经得到并设置了复选框的值。对不起,如果我的问题不清楚。 –