Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

Barrierefreie Webseiten mit ASP.NET 2.0 - Teil 4

Nun da die Menüs in die DemoSite eingebunden sind, sollten sie noch an eine Sitemap-Datei gebunden werden. Ich erstelle also die „web.sitemap“ mit den entsprechenden Einträgen im Root der Anwendung:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="<a href="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">http://schemas.microsoft.com/AspNet/SiteMap-File-1.0</a>" >
    <siteMapNode url="." title="Root"  description="Root">
        <siteMapNode url="~/Default.aspx" title="Home"  description="Startseite">
            <siteMapNode url="~/Contact.aspx" title="Kontakt"  description="Kontakt" />
            <siteMapNode url="~/GuestBook.aspx" title="Gästebuch"  description="Gästebuch" />
        </siteMapNode>
        <siteMapNode url="~/Products.aspx" title="Produkte"  description="Produkte" />
         <siteMapNode url="~/StyleGuide.aspx" title="Style Guide"  description="Style Guide" />
    </siteMapNode>
</siteMap>


Interessant ist, dass ich die Datei nicht in das Verzeichnis „App_Data“ legen kann, wo sie meiner Meinung nach hingehört. Ein eigener XmlSiteMapProvider würde das möglich machen. Der gegebene sucht die „web.sitemap“ zumindest im Root; findet er sie dort nicht, wird folgender Fehler erzeugt:
„System.InvalidOperationException: The file web.sitemap required by XmlSiteMapProvider does not exist.“

Nach längerem herumtüfteln, musste ich feststellen, dass ich für meine zwei normalen Menüebenen auch zwei SitemapDataSourcen benötige, da ich für die Menü Controls nicht die darzustellende Menüebene auswählen kann, sondern nur die Anzahl der darzustellenden Menüebenen. Bei den SitemapDataSourcen habe ich jedoch die Möglichkeit eine Startebene angeben. So kann ich für jedes Menü, über die entsprechende Datasource, eine andere Startebene wählen..

Die SitemapDataSourcen sind so eingebunden, dass der Root Node nicht angezeigt wird, für das erste Menü bei Ebene 0 (Da Root ausgeblendet ist, wird Ebene 1 zu Ebene 0 und Ebene 2 zu Ebene 1, usw.) gestartet wird und für das zweite Menü bei Ebene 1.
(Aus irgend einem Grund muss das Attribut „ShowStartingNode“ auf „False“ gesetzt werden, sonst wird auf jeder ebene nur ein Menüpunkt ausgegeben)

In den Menüs wird jeweils das Attribut „MaximumDynamicDisplayLevels“ auf „0“ gesetzt, da ich keine DHTML Menüs möchte und es wird die entsprechende „DatasourceId“ angegeben.

<asp:SiteMapDataSource
        ID="SiteMapDataSource2"
        runat="server"
        ShowStartingNode="False"
        StartingNodeOffset="1" />
<asp:Menu
        ID="SubMenu"
        runat="server"
        MaximumDynamicDisplayLevels="0"
        Orientation="Horizontal"
        DataSourceID="SiteMapDataSource2">
    <DataBindings>
        <asp:MenuItemBinding
                DataMember="SiteMapNode"
                NavigateUrlField="Url"
                TextField="Title"
                ToolTipField="Description" />
    </DataBindings>
</asp:Menu>

Weitere tolle Eigenschaften der SitemapDataSource sind, erstens dass diese die aktuelle Seite erkennt und das „Selected“ Attribut des entsprechenden MenuItems auf True setzt und zweitens können beide Menüs und SitemapDataSourcen auf der Masterpage platziert werden, denn anhand der aktuellen Seite bekommt das „SubMenu“ automatisch den richtigen Ast des Navigationsbaumes für die Ausgabe. Ich habe aus diesem Grund das „SubMenu“ nur in einen „ContentPlaceHolder“ gesetzt, um es auf Content-Seiten bei Bedarf ausblenden zu  können.

Fazit bisher:
Es ist bis jetzt relativ einfach ohne ein Controls selber schreiben zu müssen eine Website nach aktuellen Standards zu erstellen. Bisher habe ich eine einzige Zeile Programmcode, nur um den Pfad des Seitenlogos zu generieren und an das Image Control für das Logo zu übergeben.

Vorschau:
Im Teil 5 werde ich mit Hilfe einer SqlDataSource, einer DetailsView und eines DataGrids ein einfaches Gästebuch in die DemoSite einbinden.

DemoSite ansehen
Teil 4 downloaden

Posted: Freitag, 11. Mai 2007 22:21 von Jürgen Gutsch
Abgelegt unter: , , , ,

Kommentare

gosiggi sagte:

Ich finde diese Serie auch sehr ansprechend, nur ist mir aufgefallen, das es bei dem ganzen ein Problem gibt.

Sobald man eine DropDownList mit AutoPostback versieht, ist die Page auf einmal nicht mehr xhtml Valide.

Gibt es dort auch eine Möglichkeit das ganze mit AutoPostback zu realisieren, das die Page trotzdem noch xhtml Valide ist?

MfG

Siggi

# Mai 21, 2007 01:18

Jürgen Gutsch sagte:

Hi Siggi,

sobald JavaScript im Spiel ist, vor allem sobald gewisse Dinge auf der Site nur mit JavaScript funktionieren, ist die Site nicht mehr Barrierefrei.

XHTML-Valide kann sie dennoch sein. Man muss ggf. den JavaScript-Block selber schreiben, in ein CData Container packen, um die Site XHTML-Valide zu machen.

Gruß

Jürgen

# Mai 21, 2007 09:51
Anonyme Kommentare sind nicht zugelassen