2016-05-05 28 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

我沒有關注如何讓我在服務器端的靜態類中設置一個值?就像控制器屬性一樣。我已經顯示的代碼已經得到並設置了複選框的值。對不起,如果我的問題不清楚。 –