私は、iframeを介して複数のサードパーティのWebサイトで使用するように設計されたASP.netMVCに組み込まれた多数のフォームを含むシステムを持っています。各サードパーティサイトには一意のURLが割り当てられます。
http://iframedomain.com/iframe/f9a14f53-0528-4ad1-b451-8895360e57e4
コントローラは、GUIDが有効であるかどうか、およびそれに割り当てられたカスタムcssファイルへのパスがあるかどうかを確認します。存在する場合、このカスタムcssはSession変数に格納されます-cssファイルはすべて、iframeがホストされているドメインのコンテンツ/スタイル内のサブフォルダーに存在します。次に、ユーザーは正しいフォームにリダイレクトされます。
各フォームコントローラーは、共通のコントローラーを継承します。このコントローラー内で、OnActionExecutingにオーバーライドがあり、カスタムcssがVIewBagに渡されます。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Session["iFrameCSS"] != null)
{
ViewBag.iFrameCSS = Session["iFrameCSS"];
}
if (Session["JQueryTheme"] != null)
{
ViewBag.JQueryTheme = Session["JQueryTheme"];
}
base.OnActionExecuting(filterContext);
}
次に、レイアウトファイルはこれをチェックし、正しいCSSファイルをインポートします。
@if (ViewBag.iFrameCSS != null)
{
string cssFile = ViewBag.iFrameCSS.ToString();
if (cssFile.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
{
<link rel="stylesheet" href="@cssFile" type="text/css" media="screen, projection" />
}
else
{
<link rel="stylesheet" href="@Url.Content("~/Content/style/" + cssFile + ".css")" type="text/css" media="screen, projection" />
}
}
else
{
<link rel="stylesheet" href="no-custom-css-file.css" type="text/css" media="screen, projection" />
}
これはすべて、CSSファイルへのリンクが存在せずデフォルトのcssファイルが使用されるIE(7/8/9でテスト済み)を除くすべてのブラウザーで正常に機能します。ローカルでデバッグしたところ、セッションが正常に機能し、ViewBag変数が確実に設定されているIEでさまざまな結果が表示されましたが、これはライブサーバーでは機能していません。ここで何が悪いのかわかりませんか?私は4台の異なるマシンでテストしました(セットアップが大きく異なる4人で、すべて同じ結果になります)