2

base hrefタグを使用して、相対 URL がさまざまなインストールで機能するようにしようと考えました。

私のマスターページには、次のものがあります。

<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" runat="server" href="css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>

私がオンhttp://localhost/myproject/default.aspxのとき、それはうまく機能します.cssパスは次のようにうまく解決します:http://localhost/myproject/css/main.css

しかし、レポートというサブフォルダーがあります。に移動してhttp://localhost/myproject/reports/default.aspxソースを表示すると、次のように表示されます。

<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>

何かがタグ../href属性に を挿入しました。これは、次のように解決されていることを意味します:見つかりません。linkhttp://localhost/css/main.css

これは奇妙です。なぜなら、スクリプト タグに期待したとおりに機能しているからです。リンクタグだけがこのインジェクションを取得します。IE と Chrome でソースを表示しましたが、どちらも同じだったので、それを実行しているのは IIS/.NET だと思いますが、実際には HTML に触れるべきではありませんrunat="server"。これを少しいじってみると、マスター ページのリンク タグが変更されていることがわかりますが、スクリプト タグは変更されていません (先頭の「/」がない相対 URL の場合)。これは、「href」属性ではなく「src」属性であるためだと思います。したがって、ある/ない場合base href、一方のタイプは修正されますが、もう一方は壊れます。

私は気が狂っていますか、これはバグですか、それとも間違っていますか?

編集:私は実際に base タグの href をハードコーディングしていません。データベース テーブルからアプリケーション メモリに読み込まれる設定の値を書き出しています。つまり、実際に実行しています<base href="<%=Settings.Configuration.website_rooturl%>" />。私の開発マシンでは値がどこにあるのhttp://localhost/http://localhost/project/、あるクライアントサイトではそれがhttp://www.clientsite.com/、別のクライアントサイトでは仮想ディレクトリhttp://www.clientsite2.com/project/です。

4

5 に答える 5

2
<link href="<%= ResolveClientUrl("~/css/main.css") %>" rel="stylesheet" type="text/css" />
于 2013-04-23T23:37:41.693 に答える
1

問題は明らかにこれです。headのタグがあるためrunat="server"linkスタイルシートと favicon タグは HtmlLink コントロールとして扱われるため、href 属性は異なる方法でレンダリングされます (../ で挿入されます)。

インライン コードの空の二重引用符により、HtmlLink ASP.NET Web コントロールではなく、HTML コントロールとして出力されるように強制されるため、これで問題が解決したようです。

<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" runat="server" href="<%=""%>css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>

奇妙ですが、本当です。

于 2012-10-18T18:54:56.713 に答える
1

~のようにを使ってみてください<link rel="stylesheet" type="text/css" href="~/css/main.css" />

ASP.NET アプリケーションでは、~はアプリのルート ディレクトリを指します。

于 2012-10-18T18:43:47.623 に答える
0

~' ' (チルダ) 演算子を使用してルートから解決します。runat="Server"これを機能させるには、属性も追加する必要があります。

<link rel="stylesheet" type="text/css" runat="server" 
    href="~/css/main.css" runat="server" />

サイトがさまざまなインストールで機能するために、DB からのベース タグ値は必要ありません。完全に失う。また、さまざまなサーバーで必要な方法で仮想ディレクトリを構成することもできます。

于 2012-10-18T18:47:02.533 に答える