Omlouvám se, že sem zase píšu, ale já už vážně nevím jsem z toho na prášky. tento kód:
Inherits StaticSiteMapProvider
Private root As SiteMapNode = Nothing
Private List As New Dictionary(Of Integer, SiteMapNode)
Protected Overrides Sub Clear()
SyncLock Me
root = Nothing
List.Clear()
End SyncLock
End Sub
Public Overrides Function BuildSiteMap() As System.Web.SiteMapNode
SyncLock Me
Clear()
If root Is Nothing Then 'pokud je třeba generovat, generujeme
Clear()
'vytvořit kořenovou položku
root = New SiteMapNode(Me, Guid.NewGuid().ToString(), Me.UrlRoot, Me.TitleRoot)
'podpoložky natáhnout z databáze
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings(Me.ConnectionStringName).ConnectionString)
Dim TopicCom As New SqlCommand(Me.CommandTopic, con)
Dim PostCom As New SqlCommand(Me.CommandPost, con)
con.Open()
Dim TopicReader As SqlDataReader = TopicCom.ExecuteReader()
While TopicReader.Read()
Dim Topic As New SiteMapNode(Me, TopicReader(Me.UrlTopic), String.Format(Me.UrlFormatTopic, TopicReader(Me.UrlTopic)), TopicReader(Me.TitleTopic), TopicReader(Me.TitleTopic))
AddNode(Topic, root)
List.Add(TopicReader(Me.UrlTopic), Topic)
End While
TopicReader.Close()
Dim PostReader As SqlDataReader = PostCom.ExecuteReader()
While PostReader.Read()
Dim Post As New SiteMapNode(Me, Guid.NewGuid().ToString(), String.Format(Me.UrlFormatPost, PostReader(Me.UrlPost)), PostReader(Me.TitlePost))
AddNode(Post, List(PostReader(Me.IdTopicPost)))
End While
PostReader.Close()
con.Close()
End If
Return root 'vrátíme kořenovou položku
End SyncLock
End Function
Když to mám jako v tomto kódu tak mi to vyhodí hlášku:Bylo nalezeno více uzlů se stejnou adresou URL /Grr/ListTopic.aspx?Id=2. Zprostředkovatel XmlSiteMapProvider vyžaduje, aby uzly mapy webu měly jedinečné adresy URL. což není možné, protože zaprvé jsem všechny data smazal metodou clear() a za druhé v databasi mam jen jeden zaznam takže by to tuto hlášku nemělo vyhodit už protože v databasi je jen jeden záznam. => nemůže být chyba v DB. Pokud nastavím url třeba takto "" aby to prostě url nedělalo žádnou, tak si to prozměnu vymislí hlášku: Bylo nalezeno více uzlů se stejným klíčem 2. Zprostředkovatel XmlSiteMapProvider vyžaduje, aby uzly mapy webu měly jedinečné klíče. což není možné ze stejného důvodu jako minule v DB je 1 záznam a minulou vytvořenou nodu jsem smazal methodou clear() v obou těchto chybách je červeně označný tento řádek:
AddNode(Topic, root)
tedy slinkování.Už ze zoufalosti jsem zkoušel slinkovat třeba takto:
root.childnodes.Add(Topic)
Ale nato aby to fungovalo by to bylo moc jednoduché tak si to prozměnu vymislelo že jsem vyčerpal počet připojení k databasi.(což zdůraznuji neni pravda) Předpokládám, že když udělám v methodě Clear() toto:
root = Nothing
že se nastaví na nothing i childnodes což jsou v mém případě Topici u kterých to dělá chybu.Předpokládám tak i protože když jsem zkoušel smazat samotné topici třeba takto :
root.childnodes.Clear() 'nebo
root.childnodes = nothing
tak to vyhodilo chybu. Možná ještě proč tohle všechno dělám chci udělat ze static nestatic (aby při každém aktualizování tahalo z database to že chudinka database bude utlačovaná mi zatím vážně nevadí hlavně ať si to nevymíšlí hloupé chyby) Dále nevím co dodat jestli jsem tak blbej a nevidím tam triviální chybu a vi ano tak mi prosím řekněte kde! PS : omlouvám se
|