2

派生ページが実際にここの問題に関連しているかどうかはわかりませんが、現在取り組んでいるコードで興味深い落とし穴に遭遇しました。

System.Web.UI.MasterPage から派生したカスタム masterpage クラスがあるので、追加の有用なプロパティで拡張できます。

このマスターページを使用するページには、上部に宣言があります (ページ タイトルが設定されていることに注意してください)。

<%@ Page Language="C#" MasterPageFile="~/MasterPages/Landing.master" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" Title="Welcome to the site" %>

さらに、マスター ページには、構成ファイルで定義されている CDN から取得されたスタイルシート参照がヘッドに含まれています。

<head id="Head1" runat="server">
    <link rel="stylesheet" type="text/css" href="<%= CDN %>/css/main.css" />
</head>

head コンテナーの runat 属性は、リンク内のコードブロックが静的テキストであり、結果の html でそのままレンダリングされることを意味するため、上記の例は明らかに機能しません。

head から runat 属性を削除すると、CDN は機能しますが、Title が設定されていないことに気付きました。デバッグして、イミディエイト ウィンドウで Page.Title にアクセスしようとすると、例外が発生します。

// Using the Title property of Page requires a header control on the page. (e.g. <head runat="server" />).

したがって、宣言からページ タイトルを取得し、独自のタイトル プレースホルダーを頭に入れて、マスター ページのコード ビハインドから設定する方法はありますか、またはスタイルシートの CDN ドメインを動的に設定するより良い方法はありますか? 私ができると思う唯一の方法は、html リンク タグ全体を作成してヘッダー コントロールに追加することですが、もっと洗練された解決策があるかもしれないと思ったので、最初にここで質問します。

4

2 に答える 2

0

マスターページで、次のようなルーチンを作成できます。

Public Sub AddStyleSheetLink(ByVal fileName As String, Optional ByVal media As String = "all")
    Dim stylesheetLink As New HtmlLink
    With stylesheetLink
        .Attributes("href") = fileName
        .Attributes("type") = "text/css"
        .Attributes("rel") = "stylesheet"
        .Attributes("media") = media
    End With
    MasterHeader.Controls.Add(stylesheetLink)
End Sub

そして、Page_Init (マスターページを継承するページ) では、このようなものです

CType(Master, MasterPage).AddStyleSheetLink(CND & "/css/main.css")

<head> タグやページ タイトルをいじることなく、必要なものを動的に追加できます。

于 2011-03-09T20:09:14.177 に答える
0

CDN に関する限り、構成と対話し、実行モードなどに応じて正しいスタイルシート (およびその他の静的アセット) を指す特別な Url.ResolveContentUrl() メソッドを構築します。本番環境はコード変更なしで CDN に送られます。

また、コンテンツ プレースホルダーをマスターページの一部に配置する必要があります。それが飛ぶ唯一の方法です。

于 2011-03-09T20:17:33.623 に答える