簡體   English   中英

asp.net衍生的母版頁,頁面標題和動態CSS鏈接

[英]asp.net derived master pages, page titles and dynamic css links

不知道派生頁面是否確實與這里的問題有關,但是在我目前正在處理的某些代碼上遇到了一個有趣的陷阱。

我有一個自定義母版頁類,該類派生自System.Web.UI.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中。

如果我從頭刪除runat屬性,則CDN可以工作,但是現在我注意到不再設置標題。 如果我調試並嘗試在立即窗口中訪問Page.Title,則會出現異常:

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

因此, 是否有辦法從聲明中獲取“頁面標題”,將我自己的標題占位符放在頭部,並從后面的母版頁代碼中進行設置,還是有更好的方法來動態設置樣式表的CDN域? 我認為我能做到的唯一方法是構建整個html鏈接標記並將其附加到標頭控件,但我認為可能會有更優雅的解決方案,因此我首先在這里提出。

在您的母版頁中,您可以創建這樣的例程:

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>標記和頁面標題。

就CDN而言,我們構建了一個特殊的Url.ResolveContentUrl()方法,該方法與我們的配置結合使用,並根據運行模式等指向了正確的樣式表(以及任何其他靜態資產)。因此,您的開發人員和質量檢查人員在本地工作,然后您CDN的生產零代碼更改。

另外,您應該將內容占位符放入母版頁的一部分中。 這是唯一的飛行方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM