您可以使用控制适配器将这种行为巧妙地注入页面,如下所示:
public class PageAdapter : System.Web.UI.Adapters.PageAdapter
{
protected override void OnPreRender(System.EventArgs e)
{
foreach (var link in Page.Header.Controls.OfType<HtmlLink>().ToList())
if (link.Attributes["type"].Equals("text/css", StringComparison.OrdinalIgnoreCase))
if (link.Attributes["href"].Contains("/App_Themes/{0}/".Fill(Page.Theme), StringComparison.OrdinalIgnoreCase))
/* process link */
base.OnPreRender(e);
}
}
您可以通过将以下内容保存为App_Browsers文件夹中的*.browser文件来插入它:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page"
adapterType="PageAdapter" />
</controlAdapters>
</browser>
</browsers>
总的来说,我认为控制适配器是一种强大的类似 AOP 的机制,用于将行为注入到控制/页面生命周期中;他们几乎完全被忽略了,有利于传统的子分类。