私は通常、メニューの状態やフィルター (div 内の入力のセット) の可視性などを、AJAX を介してセッションのサーバー側に保存します。メニューが展開されるかフィルターが表示されると、クリック ハンドラーは Web サービスに対して AJAX イベントを発生させます。Web サービスは、メニューの状態を記録したり、ユーザーのセッションでの可視性をフィルター処理したりします。ポストバックでは、各メニュー/フィルターに対応するセッション変数を使用して、CSS を介して初期状態を設定します。クライアント側で変更を加えた場合、読み込み後に JavaScript によって更新されたときにページが点滅しないため、これはユーザー エクスペリエンスが向上することがわかりました。
例 - 私は外出中なので、これはプロジェクトの実際のコードではなく、不完全な場合があります。jQueryを使用しています。Web サービスの URL は、Web サービスの実装方法によって異なります。私は(ほとんど)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();
}