我在我的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