65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 中实现页面标题数据的简单方法

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.44/5 (15投票s)

2005年10月27日

4分钟阅读

viewsIcon

89582

downloadIcon

428

一个使在 ASP.NET 中实现页面标题标签变得容易的类。

引言

ASP.NET HeadFilter 类

动态设置网页 HEAD 部分中各种标签的值的能力常常是需要的。ASP.NET 模型的一个缺点是动态内容必须具有 "runat=Server" 属性,而具有此属性的标签必须出现在服务器窗体标签内。这使得通过代码设置这些值成为一项不简单的任务。

本文描述了解决这个问题的一种方法。我找到的现有解决方案要么要求我做 Visual Studio 不喜欢的事情,要么是我不喜欢的事情。这个解决方案非常简单易于设置(可以用一行代码实现),并且完全不会干扰您现有的设置。您不必更改页面继承层次结构,也不必做 Visual Studio 会抱怨的事情。

要在您的站点中使用此功能,只需添加对 DLL 的引用(如果您已先编译它),或者将 .vb 类文件直接插入到您的项目中,然后按需使用该类。

用法

最简单的用法

在页面的 Load 事件中,添加一行代码

Response.Filter = _
   New HeadFilter(Response.Filter, "<title>My Title Here</title>")

您只需传入希望出现在 <head></head> 标签之间的确切文本。在本例中,是页面的标题。如果您想预先构建一个巨大的字符串,其中不仅包含标题,还包含 CSS 链接、JavaScript 链接、META 标签等,那您只需这样做。

更精细的用法

当然,如果您愿意,也可以以更精细的方式使用该类。这是该用法的一个示例。同样,在页面的 Load 事件中,添加以下代码

Dim myFilter As New HeadFilter(Response.Filter)
With myFilter
   .Title = "My Page Title"
   .BaseTarget = "_new"
   .AddMetaTag("Author", "", "Travis", "")
   'etc…

End With
Response.Filter = myFilter

那么,过滤器究竟是什么?

基本上,ASP.NET 提供了一种方法来查看(并修改)在发送到浏览器之前的数据字节。Response.Filter 类是表示将发送到浏览器的数据的 Stream 对象。网上有很多文章解释了出于各种目的使用过滤器的用法。其思想是您可以编写自己的过滤器,并将其应用于管道。

我的过滤器仅查找 HEAD 标签,并将文本插入其中,而不修改文档的其余部分。

那么,我可以在里面放什么?

几乎任何东西。但浏览器(在某些情况下是服务器或路由器)会期望某些东西,例如页面标题、样式表链接等。以下是总结

BASE 标签示例

<BASE target="_blank">
<BASE href="http:www.mysite.com/somedir/">

这些通过 .BaseTarget.BaseHREF 属性实现。

STYLE 标签示例

<style type="text/css">
body {background-color: red}
p {margin-left: 20px}
</style>

这是通过 .Style 属性实现的。

TITLE 标签示例

<title>My Page Title</title>

这是通过 .Title 属性实现的。

LINK 标签示例

<link rel=stylesheet type=text/css href=/framework/styles_DEV.css>

这是通过 .AddLinkTag 方法实现的。添加您需要的任意数量。

该方法有两个重载和一个派生方法。这是因为 <link> 标签有八个属性,但最常用的是其中三个。我提供了一个重载,它只需要最常用的三个属性,另一个以便您可以使用所有八个属性。如果您使用 link 标签添加样式表,我添加了一个派生方法

  • .AddStyleSheetReference 方法 - 只需传入样式表的路径,它就会创建一个适当的 link 标签。

META 标签示例

<meta name="Author" content="Travis Laborde">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">

这些通过 .AddMetaTag 方法实现。添加您需要的任意数量。

该方法允许您同时传入 NameHTTP-Equiv 属性。应该注意的是,HTML 指南规定您在任何给定的 Meta 标签中只能使用 NameHTTP-Equiv。如果您传入 Name,它将被使用,而 HTTP-Equiv 将被忽略。否则,将使用 HTTP-Equiv

SCRIPT 标签示例

因为 Script 标签有点复杂,所以没有创建特定的属性或方法来处理它们。要将 script 标签插入到您的标题中,请改用以下通用方法

  • .AddLiteralText 方法

    使用此方法添加脚本块,或使用此类无法获得的任何其他您需要的内容。

需要考虑的事项

  • 如果您正在对响应流使用其他过滤器,可能需要进行一些调整以确保这不会干扰它们。
  • 该过滤器目前会替换 <head></head> 标签之间的任何文本。如果您也使用其他方式将数据放入其中,这将会覆盖它们。例如,Visual Studio 默认会放入一些 meta 标签,包括一个页面标题,该标题等于窗体名称。此过滤器会将这些内容替换为您通过代码创建的内容。
© . All rights reserved.