Appending Text To The Titles Of All Web Pages
Have you ever wanted to add a text string, like an application name, to the title of all your web pages. It’s easy to do using the control adapters available in ASP.NET 2.0 and later. First, create a new .browser file in the App_Browsers folder of your application, or add this entry to an existing file. Be sure to substitute MyNamespace for the correct namespace where the class is located.
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlHead"
adapterType="MyNamespace.TitleAdapter" />
</controlAdapters>
</browser>
</browsers>
Now create the TitleAdapter class that is referenced by the .browser file:
Imports System.Web.UI.Adapters
Public Class TitleAdapter
Inherits ControlAdapter
Private Shared _titleAppendString As String = " - Your Application Name Here"
Public Shared Property TitleAppendString() As String
Get
Return _titleAppendString
End Get
Set(ByVal value As String)
_titleAppendString = value
End Set
End Property
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.Render(New TitleAdapterHtmlTextWriter(writer, TitleAppendString))
End Sub
End Class
And finally, create the HtmlTextWriter that is referenced by the control adapter:
Public Class TitleAdapterHtmlTextWriter
Inherits HtmlTextWriter
Public Sub New(ByVal writer As HtmlTextWriter, ByVal appendString As String)
MyBase.New(writer)
InnerWriter = writer.InnerWriter
_appendString = appendString
End Sub
Public Sub New(ByVal writer As System.IO.TextWriter, ByVal appendString As String)
MyBase.New(writer)
InnerWriter = writer
_appendString = appendString
End Sub
Private _appendString As String
Private _renderingTitle As Boolean = False
Private _nestedCount As Integer
Public Overrides Sub RenderBeginTag(ByVal tagName As String)
If _renderingTitle Then
_nestedCount += 1
ElseIf String.Equals(tagName, "title", StringComparison.InvariantCultureIgnoreCase) Then
_renderingTitle = True
_nestedCount = 0
End If
MyBase.RenderBeginTag(tagName)
End Sub
Public Overrides Sub RenderBeginTag(ByVal tagKey As System.Web.UI.HtmlTextWriterTag)
If _renderingTitle Then
_nestedCount += 1
ElseIf tagKey = HtmlTextWriterTag.Title Then
_renderingTitle = True
_nestedCount = 0
End If
MyBase.RenderBeginTag(tagKey)
End Sub
Public Overrides Sub RenderEndTag()
If _renderingTitle Then
If _nestedCount > 0 Then
_nestedCount -= 1
Else
_renderingTitle = False
Write(_appendString)
End If
End If
MyBase.RenderEndTag()
End Sub
End Class
Note that you can edit the text string in the TitleAdapter class. Additionally, it is a static variable so you can alter it at startup from a database column in your Global.asax file.
Comments