3

2 つのマスターページがあります。main.Master と search.Master.

search.Master はネストされた masterpage であり、main.Master の「内部」にあります。CSS ファイルをマスターページで動作させるには、runat="server" 属性を配置する必要がありました。このような:

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

そして、マスターページで素晴らしい仕事をしています。ただし、このネストされたマスターページには独自のスタイルがあるため、runat="server" トリックをもう一度実行してみました。asp:content が の中にあることを確認し、次のように入力しました。

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

しかし、私のウェブサイトのソースコードを確認したところ、そこに示されたパスは次のとおりでした。

~/mp/css/master.search.css

の代わりに

../../mp/css/master.search.css

なぜこれが起こっているのか知っている人はいますか?そして、これを解決する方法は?

PS: <%= ResolveClientUrl("bla bla bla") %> は使用したくありません。これは、マスターページとテーマの関係が乱れているためです。また、ServerSide コードのヘッダーに CSS スタイルシートを挿入したくありません。

4

3 に答える 3

3

これが発生する理由は、ヘッド領域にない限り、ASPX プロセッサがそれを GenericControl に変換し、次に HtmlLink コントロールに変換するためです。

汎用コントロールの場合、href を属性として設定します。HtmlLink には、使用される Href プロパティがあり、URL を解決します。

頭の中で考えられる唯一の解決策は次のとおりです。

  1. <%=ResolveUrl("blah")%>また<%=ResolveClientUrl("blah")%>

  2. 上記の方法のいずれかを使用して、リンクをレンダリングし、URL を解決するカスタム コントロールを作成します。

于 2009-10-30T20:25:06.050 に答える
0

あなたが抱えている問題がわかります。私が思いついた唯一の回避策は、コードビハインドでSystem.Web.UI.HtmlControls.HtmlLinkオブジェクトを作成し、Hrefプロパティとrel属性(およびその他の必要な属性)を設定して、ヘッドContentPlaceHolder。

于 2009-10-30T20:46:38.737 に答える
0

すべての CSS 宣言が (直接または ContentPlaceHolder コントロールを介して) head タグ内にある場合は、マスター ページの場所に関連する CSS リンクを指定する必要があります。URL は、正しい場所に自動的にリベースされます。runat 属性は必要なく、~ を追加する必要もありません。私の場合、これは私のマスターページにあるコードです:

<link href="../../res/css/styleForThisParticularMasterPage.css" rel="stylesheet" type="text/css" />
于 2009-10-30T21:12:32.350 に答える