Programová práce s hlavičkou stránky

 

Novinkou v ASP.NET 2.0 je nativní přístup k hlavičce (element head) webových stránek. Je možno ho využít například k automatickému generování odkazu na RSS feed.

RSS autodiscovery

S rozvojem technologie RSS se objevila nutnost nějakým systemizovaným způsobem ukázat, kde leží RSS feed dané stránky. Proto vznikl mechanismus RSS autodiscovery. Pokud si chcete přidat tento web do čtečky, stačí zadat adresu jeho domovské stránky (http://www.aspnet.cz/) a čtečka si sama iniciativně dohledá adresu RSS feedu jako takového (http://www.aspnet.cz/WS/GetRSS.aspx).

Celá technologie stojí na tom, že se do hlavičky stránky přidá následující kód:

<link rel="alternate" type="application/rss+xml"
      HREF="/WS/GetRSS.aspx"
      title="Nejnovější články na ASPNET.CZ" />

Význam atributů je následující:

  • rel="alternate" určuje, že se jedná o alternativní verzi webu, o jinou možnost přístupu
  • type="application/rss+xml" určuje, že tato alternativa je v XML, konkrétně ve formátu RSS
  • href="..." je adresa, na níž se tato verze (feed) nachází
  • title="..." je textový popis feedu (nadpis)

Dynamické generování odkazů

Zobrazení více RSS feedů v IE7 Beta 1Pokud máte na webu jediný feed pro všechny články, je řešení snadné - prostě na všechny stránky vložíte jeden odkaz a je vystaráno. Nicméně pokud chcete u většího webu provozovat feedů více, například pro každou rubriku nebo autora, je to poněkud problém. RSS autodiscovery to umožňuje (můžete mít více feedů, rozlišíte je atributem title), ale odkazy na ně musíte generovat dynamicky.

Naštěstí třída System.Web.UI.Page disponuje v ASP.NET 2.0 vlastností Head. Ta reprezentuje právě sekci head v HTML kódu. A jako (skoro) všechny ovládací prvky disponuje kolekcí Controls, která obsahuje ovládací prvky které jsou její součástí. Pak už stačí jen vytvořit instanci třídy System.Web.UI.HtmlControls.HtmlLink, nastavit jí parametry a z backendového kódu ji přidat.

Napsal jsem si na to jednoduchou metodu nazvanou AddRssFeed:

Public Shared Sub AddRssFeed(ByVal Page As System.Web.UI.Page, ByVal Title As String, ByVal Url As String)
    Dim L As New System.Web.UI.HtmlControls.HtmlLink()
    L.Attributes.Add("rel", "Alternate")
    L.Attributes.Add("type", "application/rss+xml")
    L.Attributes.Add("title", Title)
    L.Attributes.Add("href", Url)
    Page.Header.Controls.Add(L)
End Sub

Ze stránky ji můžete zavolat jednoduše, například: AddRssFeed(Me, "Články v rubrice " & CategoryName, "~/Rss.ashx?Category=" & CategoryID).

Titulek:
Text komentáře:
Vaše jméno:
Váš e-mail: (nebude zveřejněn)

WWW stránka:
Opište text z obrázku:

A je v NET 2.0 možnost takto ovlivnit třeba i obsah <title>?

odpovědětodpovědět Gravatar

RE: A title?

22.12.2005 10:54:3722.12.2005 10:54:37 Michal MartinkaMichal Martinka ---.adsl.slovanet.sk

Ano je. Class HtmlHead ma okrem vlastnosti Controls aj vlastnost Title.

Napriklad v Page_Load:

protected void Page_Load(object sender, EventArgs e)

{

this.Header.Title = "Title for my page";

}

Doplním, že vlastnost "title" má i přímo třída Page - můžete psát Me.Title = "něco" (VB), this.Title = "něco"; (C#)

odpovědětodpovědět Gravatar

title - přístup z vloženého ASCX

A nemáte někdo nějaký nápad jak k tomuto objetu přistoupit z vnořeného ASCX... když třeba v něm teprve znám ty data, který chci do hlavičky dát... zkoušel jsem konstrukce Me.Page.Title i nějaký Me.Parent.Parent.... chybu to nehodí ale neprovede se to.

odpovědětodpovědět Gravatar

RE: title - přístup z vloženého ASCX

Já to dělám trochu jinak a funguje to taky. Mám MasterPage typu BaseMaster a v ní mám:

<head>

...

<link rel="alternate" runat="server" id="linkRss" type="application/rss+xml" title="RSS inzerce" href="" />

</head>

v MasterPage codebehind si uděláš funkci

public void ChangeRssLinkRel(string rssAddress)

{

linkRss.Href = rssAddress;

}

a ve vnořené stránce zavoláš:

((BaseMaster)Master).ChangeRssLinkRel(rss);

Já takhle dynamicky generuju pod vyhledávacím oknem RSS feed odpovídajíácí filtru, mrkni na http://www.kup-nemovitost.cz/filter.aspx

odpovědětodpovědět Gravatar

meta-tagy

25.12.2005 10:56:3925.12.2005 10:56:39 DeaLerDeaLer 84.21.124.---

Jakým způsobem bych mohl změnit obsah nějakého meta-tagu? Např. meta-tagu description.

Úplně stejně - jenom místo třídy HtmlLink použijete HtmlMeta.

odpovědětodpovědět Gravatar

Kolekce neexistuje...

30.12.2005 10:26:1030.12.2005 10:26:10 TomasSapikTomasSapik ---.99.broadband4.iol.cz

Mam ASP 2.0 NET a objekt Header neobsahuje zadnou takovou kolekci ..... CS0117: 'System.Web.UI.IPageHeader' does not contain a definition for 'Controls' ..... kde je problem ?

Žádná třída (resp. interface) IPageHeader podle dokumentace neexistuje. Head je typu System.Web.UI.HtmlControls.HtmlHead. Nemáte nějakou starou betu nebo tak něco?

odpovědětodpovědět Gravatar

RE: Kolekce neexistuje...

Microsoft .NET Framework Version:2.0.50215.44; ASP.NET Version:2.0.50215.44

.... mel jsem za to ze se jedna o posledni verzi .... ps mate odkaz na zdroj kde lze stahnout finalni verzi 2.0 vcetne Whidbey ? ....

Finální verze je 2.0.50727. Runtime si můžete stáhnout na http://snipurl.com/l6a3. Whidbey je kódové označení pro .NET 2.0.

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET