Avatar billede dennisjuul Nybegynder
11. juli 2006 - 08:17 Der er 24 kommentarer og
1 løsning

Bestemt sitemap-fil i en given mappe

Hej!

Jeg har et asp.net 2.0 website (C#), hvor jeg holder styr på navigationen via en sitemap-fil, og menuen, der viser dette, ligger i en masterpage-fil. I en given mappe, vil jeg dog gerne have vist en anden sitemap-fil på mit website (dvs. i masterpage-filen). Kan det lade sig gøre?

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 09:35 #1
Ja - det kan det sagtens... Du kan blot konfigurere flere sitemap providers op i din konfigurationsfil.
Hvis denne artikel ikke er tilstrækkelig, må du lige sige til.
http://msdn2.microsoft.com/en-us/library/ms178426.aspx
Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 10:33 #2
Okay tak, men jeg ikke rigtig finde ud af og få erstattet min default-menu, med en der er defineret i en undermappe, hvis jeg klikker på en side fra undermappen.

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 11:17 #3
Du kan angive hvilken provider du vil benytte på en sitemap datasource, så på den måde har du muligheden for at konfigurere alle de providers op du vil, og angive hvilken en af dem der skal bruges på en bestemt master. Det kan du gøre både deklerativt og progammatisk.

Hvis dine subfoldere er applikationer på IIS'en (du får en fejl, hvis subfolderen ikke er konfigureret som applikation) - kan du blot angive en anden konfiguration i konfigurationsfilen i den respektive folder - f.eks.:

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <siteMap defaultProvider="SomeProvider">
        <providers>
          <add
              siteMapFile="SomeSitemap.sitemap"
              name="SomeProvider"
              type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </providers>
      </siteMap>
    </system.web>
</configuration>

Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 11:50 #4
Hmm... hvis jeg opretter en web.config i undermappen og indsætter ovenstående info, så brokker VS sig med flg. besked:
"Det er ikke tilladt at bruge et afsnit, der er registreret som allowDefinition=..."
og det er selv om, at jeg har oprettet undermappen som et program i IIS.

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 12:02 #5
Prøv at åbn sitet via localhost - det burde fungere (det gør det i hvert fald her :o)
Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 12:19 #6
Næ, den går ikke, den skriver, at det tema, der er angivet i web-config (roden) ikke kan findes.
Avatar billede snepnet Nybegynder
11. juli 2006 - 12:28 #7
Hmm... Du kan lige se et eksempel her så:

// i web.config i root
<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <trace enabled="false" pageOutput="true"/>
    <compilation debug="true"/>
    <authentication mode="Windows"/>
  </system.web>
</configuration>

Altså ingen ting af betydning her.

// i web.config i en subfolder (SomeFolder)
<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <siteMap defaultProvider="AspNetXmlSiteMapProvider2">
      <providers>
      <add
          siteMapFile="SomeSitemap.sitemap"
          name="AspNetXmlSiteMapProvider2"
            type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </siteMap>
  </system.web>
</configuration>

Og der er så en en sitemap fil med navnet SomeSitemap.sitemap i underfolderen, og det ser blot ud som følger:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title="ChildSitemap"  description="">
        <siteMapNode url="" title="Blah"  description="" >
          <siteMapNode url="a.html" title="Side1" />
          <siteMapNode url="b.html" title="Side2" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

Prøv at se om du ikke kan få det (eller noget tilsvarende) til at virke.

Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 13:43 #8
Har oprettet er website, med en web.config (med dit indhold), masterpage-fil, en default.aspx, en sitemap-fil (i stil med din), og en mappe med navnet 'kurser'.

I mappen er en kurser.aspx, en web.config (med dit indhold) og en sitemap-fil kurser.sitemap. Stadig samme problem.

Men lige et spørgsmål vedrørende indholdet i web.config (under kurser). Den provider man her angiver (som du i eksemplet kalder: AspNetXmlSiteMapProvider2), i hvilken fil skal den placeres? Sammen med den anden datasource i master-filen, hvor menuen også er? Eller...

På forhåned tak.

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 13:52 #9
Er ikke sikker på jeg helt forstår hvad du mener med hvor den skal placeres? Hvad tænker du på der?
Må jeg se den præcise fejl du får - og de filer du bruger? ... Jeg har ikke noget ballade med at få det til at funge her.
Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 13:57 #10
Fejlen er: "Det er ikke tilladt at bruge et afsnit, der er registreret som allowDefinition='MachineToApplication', uden for programniveau. Fejlen kan være forårsaget af, at der er en virtuel mappe, der ikke er konfigureret som et program i IIS." Men websitet og mappen 'kursus' er begge oprettet som programmet i IIS. Den opstår, når jeg indsætter dit eksempel i web.config i mappen 'kursus'.

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 14:06 #11
Så er det enten fordi din subfolder stadig ikke er konfigureret som en applikation, eller fordi du kører applikationen fra visual studio.
(Det er i hvert fald de bedste gæt jeg har :o)
Mvh
Avatar billede dennisjuul Nybegynder
11. juli 2006 - 14:41 #12
Så er det kommet til at funke. Ovenstående fejl kommer stadigvæk i VS, men nu kører det da. Hvis du smider et svar, så vil jeg med gælde give dig de 30 point. Og mange tak for din tålmodighed. :-D

/* dennisjuul */
Avatar billede snepnet Nybegynder
11. juli 2006 - 14:50 #13
Var bestemt så lidt.... Du får det ikke til at virke i VS hvis du arbejder fil-baseret. Det burde gå, hvis du arbejder direkte mod IIS'en.
Mvh
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 07:41 #14
Okay. tak igen.

/* dennisjuul */
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 09:21 #15
Et hurtigt tillægsspørgsmål. Ved du om man er tvunget til at have en kopi af sit tema og masterfil i undermapper, hvis man kører sit website som ovenstående? Dette skaber en del kopier af samme data i undermapperne, som i roden, hvilket ikke er særlig hensigtsmæssigt.

/* dennisjuul */
Avatar billede snepnet Nybegynder
12. juli 2006 - 09:50 #16
Virker det da ikke hvis du blot har temaer i roden? (det skulle det da gerne gøre).
Mvh
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 10:16 #17
Næ, ikke når jeg opretter undermappen som et program og smider en web.config ind i mappen også. Så dukker flg. fejl op:

Meddelelse om parserfejl: Temaet 'Tema1' blev ikke fundet i programmet eller i de globale temamapper.

Men jeg må prøve at finde en løsning, så jeg ikke skal kopiere alle tema-filer og min masterpage, hver gang der skal en ændring.

/* dennisjuul */
Avatar billede snepnet Nybegynder
12. juli 2006 - 10:24 #18
Hmm.... Hvad ønsker du at placere i dine undersites?

Er det sådan her du vil have det:

Root
  Temaer
  Sitemap

  Subs
    Master
    Sitemap

Eller?

Hvis det ikke er relevant at subfoldere er applikationer, udover at det giver en nem måde at håndtere sitemaps på, så synes jeg du skal bruge en anden løsning til det.

Mvh
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 10:35 #19
De forskellige undermapper skal blot have et individuelt sitemap, ellers skal resten være ens.

/* dennisjuul */
Avatar billede snepnet Nybegynder
12. juli 2006 - 11:08 #20
Så synes jeg blot du skal sætte den aktuelle sitemapprovider som en public property på din master, og så lave en baseform som vælger den rigtige provider afhængig af hvor du er i dit hierarki.
Mvh
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 12:44 #21
Okay, har oprettet BaseForm-klassen, der skal nedarves på alle sider. Men jeg kan ikke tilgå masterfilen fra BaseForm-klassen og rette den property, jeg har oprettet.

(Kræver måske snart et helt nyt spørgsmål :-D)

/* dennisjuul */
Avatar billede snepnet Nybegynder
12. juli 2006 - 12:54 #22
Tjoh ... det burde du nu nok kunne - men egentlig kan du vel sådan set bare styre det hele på mastersiden. Det eneste du skal gøre er at angive hvilket provider du vil bruge på din sitemap datasource.
Mvh
Avatar billede snepnet Nybegynder
12. juli 2006 - 12:58 #23
(Du kan få din aktuelle path med Path.GetDirectoryName(Request.Path) - klassen Path ligger i System.IO)
Avatar billede dennisjuul Nybegynder
12. juli 2006 - 14:49 #24
SÅ virker det, takker igen.

/* dennisjuul */
Avatar billede snepnet Nybegynder
12. juli 2006 - 15:11 #25
Bare iorden :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester