問題は、非表示にしているもの (クライアント側またはサーバー側) が、関連付けられているすべてのコントロールをカプセル化していないことです。たとえば、ASP.NET メニューを使用している場合、次のコードを使用してサーバー側のメニュー オプションを非表示にすることができます。
switch (UserRole) {
case "Administrator":
Menu1.Items.Item(0).Enabled = false;
break;
}
これらのコントロールは、そのオプションに関連付けられているすべての HTML を確実に折りたたむようにします。ただし、独自のコントロールを使用している場合、またはクライアント側のものを隠している場合は<div>
、コントロールを含むコンテナー全体 (つまり ) を確実に非表示にする必要があります。これを行う良い方法は、jQuery を使用することです。
$("#divVacationControl").hide();
IE8 のどのコントロールが非表示になっておらず、望ましくない外観のままになっていないかを判断する最善の方法は、IE 開発者ツールバーを使用することです。F12 ボタン、または[ツール] -> [開発者ツール] からアクセスできます。ここからダウンロードすることもできます: http://www.microsoft.com/en-us/download/details.aspx?id=18359
開いたら、「クリックで要素を選択」機能を使用して、非表示の要素を調べ、DOM を調べます。その後、隠れていない犯人を見つけて、ロジックを確認できます。
特定のブラウザでのみ発生する場合の最後の方法は、互換モードを設定することです。これが最善の方法だとは言いませんが、オプションです。これを行う方法は、以下の私のブログ投稿で読むことができます。IE7またはあなたのために働いたものを使用してください。環境を完全に制御できる企業イントラネット アプリでない限り、このアプローチを長期的なソリューションとしてお勧めしません。
IE8 を使用して ASP.NET イントラネット サイトのドキュメント互換性モードを指定する