不确定派生页面是否真的与这里的问题相关,但在我目前正在处理的一些代码上遇到了一个有趣的问题。
我有一个自定义母版页类,它派生自 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 链接标记并将其附加到标题控件,但我认为可能有更优雅的解决方案,所以我先在这里问。