vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ASP.NET, WebServices u. Remoting
Re: Meta-Daten in ASPX-Seiten, welche Masterpages verwenden 
Autor: Drapondur
Datum: 10.10.06 13:18

Hallo,

ich würde ein eigenes Control erstellen, das die gleichen Attribute hat wie das Meta-Tag. Das kann man dann innerhalb des Contentplaceholders der eigentlichen Seite platzieren. Dann muss man noch bei jeder Seite OnPreRender überschreiben, dort alle von den eigenen Meta-Controls auffinden, sie von der Seite entfernen und der Masterpage hinzufügen.

Im Control muss man Render überschreiben, und das HTML-Meta-Tag rendern.
Das Control:
Imports Microsoft.VisualBasic
Imports System.Web.UI.WebControls
Imports System.Web.UI
 
Namespace EigeneControls
    Public Class MetaCtrl
        Inherits Control
 
        'Eine Property für das meta-Attribut "Name"
        Private _name As String = ""
        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                _name = value
            End Set
        End Property
 
        'Eine Property für das meta-Attribut "Content"
        Private _content As String = ""
        Public Property Content() As String
            Get
                Return _content
            End Get
            Set(ByVal value As String)
                _content = value
            End Set
        End Property
 
        'Das HTML-Meta-Tag schreiben
        Protected Overrides Sub Render(ByVal wr As System.Web.UI.HtmlTextWriter)
            wr.WriteBeginTag("meta")
            wr.WriteAttribute("name", Me.Name)
            wr.WriteAttribute("content", Me.Content)
            wr.Write(HtmlTextWriter.SelfClosingTagEnd)
            wr.Flush()
            MyBase.Render(wr)
        End Sub
    End Class
End Namespace
Ein gemeinsame Basisklasse für alle "normalen" Seiten
Imports Microsoft.VisualBasic
Imports System.Collections.Generic
 
Public Class BasePage
    Inherits System.Web.UI.Page
 
    Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
        Try
            'wenn keine Masterpage da ist, nix machen
            If Me.Master Is Nothing Then
                Return
            End If
 
            'Alle eigenen Meta-Controlsfinden
            Dim metas As List(Of EigeneControls.MetaCtrl)
            metas = FindAllMeta(Me)
            If metas.Count = 0 Then
                Return
            End If
 
            'Die Metacontrols von der Seite entfernen
            For Each meta As EigeneControls.MetaCtrl In metas
                meta.Parent.Controls.Remove(meta)
            Next
 
            'DieMetacontrols zum Head der Masterpage dazutun
            Dim mPage As MasterPage = CType(Me.Master, MasterPage)
            For Each ctrl As Control In mPage.Controls
                If TypeOf ctrl Is HtmlHead Then
                    For Each meta As EigeneControls.MetaCtrl In metas
                        ctrl.Controls.Add(meta)
                    Next
                    Exit For
                End If
            Next
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
        Finally
            MyBase.OnPreRender(e)
        End Try
    End Sub
 
    'Findet rekursiv alle Meta-Controls in der Seite
    Private Function FindAllMeta(ByVal startCtrl As Control) As List(Of _
      EigeneControls.MetaCtrl)
        Dim ret As New List(Of EigeneControls.MetaCtrl)
        If startCtrl.HasControls Then
            For Each subCtrl As Control In startCtrl.Controls
                If TypeOf subCtrl Is EigeneControls.MetaCtrl Then
                    ret.Add(CType(subCtrl, EigeneControls.MetaCtrl))
                End If
                If subCtrl.HasControls Then
                    Dim subList As List(Of EigeneControls.MetaCtrl) = _
                      FindAllMeta(subCtrl)
                    ret.AddRange(subList)
                End If
            Next
        End If
        Return ret
    End Function
End Class
Eine normale Seite
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" _
  AutoEventWireup="false"
CodeFile="Default.aspx.vb" Inherits="_Default" title="Untitled Page" %>
<%@ Register Namespace="EigeneControls" TagPrefix="ec"  %>
<asp:Content ID="cpHdr" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
	<ec:MetaCtrl ID="meta1" runat="server" Name="keywords" Content="Keyword1" />
	Seite 1<br />
</asp:Content>
und der Code für die Seite
Partial Class _Default
    Inherits BasePage
 
End Class
Die Masterpage heisst einfach "MasterPage" und hat keine Besonderheiten.

Ciao
D.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Meta-Daten in ASPX-Seiten, welche Masterpages verwenden1.517Newstone01.10.06 12:08
Re: Meta-Daten in ASPX-Seiten, welche Masterpages verwenden1.040Drapondur10.10.06 13:18
Re: Meta-Daten in ASPX-Seiten, welche Masterpages verwenden872ModeratorDaveS11.10.06 07:55
Re: Meta-Daten in ASPX-Seiten, welche Masterpages verwenden856Drapondur11.10.06 13:16
Hinweis zur Lösung1.044Drapondur13.10.06 17:44
Re: Meta-Daten in ASPX-Seiten, welche Masterpages verwenden856Newstone14.10.06 10:53
Monsterpeinlich791Drapondur25.10.07 20:30

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel