Я обычно храню такие вещи, как состояние меню или видимость фильтра (набора входов в div) и т. Д. На стороне сервера в сеансе через AJAX. При раскрытии меню или отображении фильтра обработчик щелчков запускает событие AJAX для веб-службы, которая записывает состояние меню или видимость фильтра в сеансе пользователя. При обратной передаче я использую переменные сеанса, соответствующие каждому меню / фильтру, чтобы установить его начальное состояние с помощью CSS. Я считаю, что это удобнее для пользователя, поскольку страница не мигает , когда она обновляется javascript после загрузки, если вы вносите изменения на стороне клиента.
Пример - поскольку я в дороге, это не фактический код из проекта и может быть неполным. Использует JQuery. URL для веб-службы будет зависеть от того, как вы реализуете веб-службы. Я использую ASP.NET MVC (в основном), так что мой будет действие контроллера.
<script type='text/javascript'>
$(document).ready( function() {
$('#searchFilter').click( function() {
var filter = $(this);
var filterName = filter.attr('id');
var nowVisible = filter.css('display') === 'none';
if (nowVisible) {
filter.show();
}
else {
filter.hide();
}
$.post('/controller/SetFilterVisibility',
{ name: filterName, visibility: nowVisible } );
});
});
</script>
<div id='searchFilter' <%= ViewData["searchFilterVisibility"] %> >
...
</div>
Код на стороне сервера
[AcceptVerbs( HttpVerbs.POST )]
[Authorization]
public ActionResult SetFilterVisibility( string name, bool visible )
{
Session[name] = visible;
return Content( string.Empty ); // not used...
}
[AcceptVerbs( HttpVerbs.GET )]
[Authorization]
public ActionResult SomeAction( int id )
{
...
ViewData["searchFilterVisibility"] = Session["searchFilter"];
...
return View();
}