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






4.44/5 (15投票s)
2005年10月27日
4分钟阅读

89582

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
方法实现。添加您需要的任意数量。
该方法允许您同时传入 Name
和 HTTP-Equiv
属性。应该注意的是,HTML 指南规定您在任何给定的 Meta
标签中只能使用 Name
或 HTTP-Equiv
。如果您传入 Name
,它将被使用,而 HTTP-Equiv
将被忽略。否则,将使用 HTTP-Equiv
。
SCRIPT 标签示例
因为 Script
标签有点复杂,所以没有创建特定的属性或方法来处理它们。要将 script
标签插入到您的标题中,请改用以下通用方法
.AddLiteralText
方法使用此方法添加脚本块,或使用此类无法获得的任何其他您需要的内容。
需要考虑的事项
- 如果您正在对响应流使用其他过滤器,可能需要进行一些调整以确保这不会干扰它们。
- 该过滤器目前会替换
<head>
和</head>
标签之间的任何文本。如果您也使用其他方式将数据放入其中,这将会覆盖它们。例如,Visual Studio 默认会放入一些meta
标签,包括一个页面标题,该标题等于窗体名称。此过滤器会将这些内容替换为您通过代码创建的内容。