【问题标题】:asp.net derived master pages, page titles and dynamic css linksasp.net 导出母版页、页面标题和动态 css 链接
【发布时间】:2011-03-09 19:26:36
【问题描述】:

不确定派生页面是否真的与这里的问题相关,但在我目前正在处理的一些代码上遇到了一个有趣的问题。

我有一个自定义母版页类,它派生自 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 链接标记并将其附加到标题控件,但我认为可能有一个更优雅的解决方案,所以我先在这里问。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在您的母版页中,您可以创建如下例程:

      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")
      

      您可以动态添加您需要的内容,而不会弄乱您的

      标签和页面标题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多