asp.net派生的母版页,页面标题和动态CSS链接

时间:2011-03-09 19:26:36

标签: asp.net master-pages stylesheet head page-title

不确定派生页面是否与此处的问题实际相关,但是对于我目前正在处理的一些代码遇到了一个有趣的问题。

我有一个自定义母版页类,它派生自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中按原样呈现。

如果我从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链接标记并将其附加到标题控件,但我认为可能有更优雅的解决方案,所以我先问这里。

2 个答案:

答案 0 :(得分: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")

您可以动态添加所需内容而不会弄乱你的&lt; head&gt;标签和页面标题。

答案 1 :(得分:0)

就CDN而言,我们构建了一个特殊的Url.ResolveContentUrl()方法,该方法与我们的配置对话,并根据运行模式等指向正确的样式表(以及任何其他静态资产)。因此,您的开发和QA工作在本地,然后您的生产转到CDN,代码更改为零。

此外,您应该将内容占位符放入母版页的部分。这是唯一的飞行方式。