- PR -

スタイルシートが反映されない

1
投稿者投稿内容
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-12-05 07:49
いつもお世話になっています。
現在ASP.NETでWebアプリケーションを作成しているのですが、奇妙な現象に
とらわれており、悩んでおります。過去ログも検索したのですが
該当する情報が見当たりませんでした。

アプリケーションの構成としては、
-機能ごとにフォルダを作成し、その中にWebページを格納しています。
 メニューページのみはアプリケーションルートにおいています
-スタイルシートを下記のように各Webページのヘッダに記述しています。
 <LINK href="../Styles.css" type="text/css" rel="stylesheet">
 スタイルシートはアプリケーションルートにおいています
-各WebページへはServer.Transferを使って、遷移しています。

さて、上記の条件でPostBackでない最初のファイル読み込み時に、
なぜか、スタイルシートが反映されません。

理由をいろいろ追求し、以下のことを発見しました。
1.PostBackでない時はFormのactionに"(ディレクトリ名)/(ASPXファイル名)"が
 設定されている
2.PostBack時はFormのactionに"(ASPXファイル名)"のみが設定されている

ところが、なぜ1.のようになるのか。PostBackでないときでも正しくスタイル
シートに反映させるにはどうすればよいのかで、四苦八苦していますが
現時点では解決法が見出せていません。

どなたかこれに関連した情報をお持ちの方がおられましたらどうか教えて
いただけないでしょうか。



[ メッセージ編集済み 編集者: べーちゃん 編集日時 2002-12-05 07:56 ]
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-12-05 08:59
引用:

べーちゃんさんの書き込み (2002-12-05 07:49) より:

-スタイルシートを下記のように各Webページのヘッダに記述しています。
 <LINK href="../Styles.css" type="text/css" rel="stylesheet">
 スタイルシートはアプリケーションルートにおいています



最近.NETを使用できる状態に無い情けない男からの意見です。

ルートにあるならいっそ、
 <LINK href="/Styles.css" type="text/css" rel="stylesheet">
にしてみたらどうなるでしょう。

それからスタイル関連の問題の場合、使用ブラウザも念のためお聞きしたいです(IE6ですよね?)。

#早く会社のマシンに.NET開発環境を入れたい…。
#なんで.NETを経験した後に立て続けにVB6(今までやったことがない)をいじらねばならないのだー
XeCl
会議室デビュー日: 2002/08/29
投稿数: 15
投稿日時: 2002-12-05 09:31
"メニューページも aspx ファイルで,
Server.Transfer で作成された
ディレクトリにある aspx ファイルに
遷移する" という前提で書きます.
Server.Transfer でも PostBack は
PostBack ですよ.

> 1.PostBackでない時はFormのactionに
> "(ディレクトリ名)/(ASPXファイル名)"が
> 設定されている
> 2.PostBack時はFormのactionに
> "(ASPXファイル名)"のみが設定されている

1. の状況では,メニューページの
aspx ファイルに PostBack しています.
従って,1. では URI が変化していない
はずです (ブラウザのアドレス欄で確認
して下さい).
2. の状況では,作成したディレクトリに
ある aspx ファイルに PostBack する
ことになります.

じゃあどうしたらいいか ?
ユーザコントロールをつかうといいです.
C# の場合:

(1) アプリケーションルートに
uTmp.ascx を作成.

uTmp.ascx に以下を追加.
<link href="<%= uri %>" rel="stylesheet" type="text/css">

uTmp.aspx.cs は以下のような感じ.

public string uri;
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
uri = "Styles.css";
}
else
{
uri = "../Styles.css";
}
}

(2) 作成したディレクトリにある aspx
ファイルの HTML の2行目あたりに
<%@Register TagPrefix="be" Tagname="css" src="../uTmp.ascx" %>
本来 rel タグを置くべき所に
<be:css id="bechan" runat="server" />

みたいな感じでどうでしょう ?
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-12-06 03:30
DaikiRyutoさん、XeClさん、情報ありがとうございます。

>ルートにあるならいっそ、
> <LINK href="/Styles.css" type="text/css" rel="stylesheet">
>にしてみたらどうなるでしょう。

説明不足だったようですみません。アプリケーションのルートは本当の
ルートではなく、アプリケーションのインストールディレクトリのため、
上記の設定ではスタイルシートが参照できませんでした。
また、現在は開発環境で動作していますが顧客がどこにインストールするか
不明のため、この方法は使えそうにありません。

>1. の状況では,メニューページの aspx ファイルに PostBack しています.
>従って,1. では URI が変化していない はずです (ブラウザのアドレス欄で
>確認して下さい).

なるほどフレームを使ったプログラムなので確認はまだできていませんが
確かに動作を考えると言われるとおりですね。

>じゃあどうしたらいいか ?
>ユーザコントロールをつかうといいです.

なるほど。ということでユーザーコントロールを作りかけていたのですが、
実はふとしたいたずら心から"Styles.css"と"../Styles.css"の2行の
リンクをはったところ、思った動作が得ることができてしまいました。

スタイルシートを複数登録することに問題がないかはわからないのですが、
現時点で問題も発生していないようなので、今回はとりあえず2行リンクを
はることで済ますことにしました。

ありがとうございました。
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-12-06 17:49
引用:

スタイルシートを複数登録することに問題がないかはわからないのですが、
現時点で問題も発生していないようなので、今回はとりあえず2行リンクを
はることで済ますことにしました。


以前の Netscape では、指定された CSS ファイルが存在しないとエラーになったような。

# ちと忙しいので、これだけ。 f(^^;
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-12-07 07:32
biacさんありがとうございます。

そうですか、Netscapeでは問題があるんですね。でも、ブラウザで
簡単にエラーがでるとはちょっと変な気がしますね。
基本的にはなければ無視すればいいだけのような気がします。
まあ、どうでもいいことですが。

ところで本件なんですが、アプリケーションはイントラネットで
IEが企業標準ブラウザなんで、とりあえず今回はそのままに
しておきます。

ありがとうございました。
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-12-10 08:27
技術者としての好奇心がそうさせるのか、はたまた単に気が小さいだけなのか、
今回はそのままにしておくなどといいながら、いろいろいじりたおしておりました。

そこでServer.Transferを使わずにResponse.Redirectを使うことにより
実行ディレクトリが変わっても正しく処理されることを確認できました。
1

スキルアップ/キャリアアップ(JOB@IT)