Toon posts:

[C#] Relatieve URL perikelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 20:40
Heren/dames developers,

Ik heb een raar probleem m.b.t. een relatieve url binnen mijn applicatie.

Mijn applicatie draait op http://localhost/submap/.

Ik voeg vanuit de achtergrond code dynamisch wat javascript files toe aan de pagina (omdat deze onder bepaalde voorwaarden wel of niet toegevoegd moeten worden) op de volgende manier:

code:
1
2
3
4
5
ClientScriptManager csm = Page.ClientScript;
if (!csm.IsClientScriptIncludeRegistered(this.GetType(), "Util"))
{
csm.RegisterClientScriptInclude(this.GetType(), "Util", ResolveClientUrl("~/js/Util.js"));
}

Dit werkt gewoon naar behoren. De website kijkt keurig op http://localhost/submap/js/naampje.js

Hetzelfde wil ik doen met een CSS file vanuit dezelfde pagina. Deze dient ook onder bepaalde voorwaarden wel of niet gebruikt te worden en daarom dat ik deze dynamisch toevoeg vanuit de code-behind.
Uiteraard staat deze CSS in een andere map en deze voeg ik toe op de volgende manier:

code:
1
2
3
4
5
6
7
8
9
10
11
//Register CSS stylesheets
        if (Page.Header.FindControl("UtilCSS") == null)
        {
            System.Web.UI.HtmlControls.HtmlLink css = new System.Web.UI.HtmlControls.HtmlLink();
            css.Href = ResolveClientUrl("~/CSS/style.css");
            css.ID = "UtilCSS";
            css.Attributes["rel"] = "stylesheet";
            css.Attributes["type"] = "text/css";
            css.Attributes["media"] = "all";
            Page.Header.Controls.Add(css);
        }


Dit werkt niet :|
De website kijkt niet naar http://localhost/submap/CSS/style.css, maar naar http://localhost/CSS/style.css en kan daardoor het bestand niet vinden.

Hoe kan het dat de ResolveClientUrl() functie totaal anders reageert?

De bestanden staan op de juiste positie in de mappenstructuur en als ik de CSS file naar de 'foute' positie verplaats, word hij keurig aangeroepen. Dus dat bewijst dat de ResolveClientUrl() functie daadwerkelijk een andere map terug geeft.

Iemand ideeën? Want ik zie het ff niet |:(

Acties:
  • 0Henk 'm!

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 17:04
Note
The URL returned by this method is relative to the folder containing the source file in which the control is instantiated. Controls that inherit this property, such as UserControl and MasterPage, will return a fully qualified URL relative to the control.
Van de bron: MSDN: Control.ResolveClientUrl Method (System.Web.UI)

Acties:
  • 0Henk 'm!

  • Anoniem: 39520
  • Registratie: November 2001
  • Niet online
Dan zou ik Server.MapPath gebruiken.
MSDN: Server.MapPath Method

Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 20:40
Server.MapPath werkt inderdaad. Toch blijf ik het raar vinden dat ik 2 bestanden (in 2 verschillende mappen op hetzelfde niveau) vanuit dezelfde positie aanroep, bij de ene ResolveClientUrl() wel werkt en bij de andere niet.

Acties:
  • 0Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 05-04 18:40
Maar... MapPath() mapt toch helemaal niet naar de URL ten aanzichte van de root van de website, maar naar de fysieke locatie van het bestand op het filesystem?

We are shaping the future


Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 20:40
Alex) schreef op maandag 09 mei 2011 @ 16:39:
Maar... MapPath() mapt toch helemaal niet naar de URL ten aanzichte van de root van de website, maar naar de fysieke locatie van het bestand op het filesystem?
Correct. Het werkt nu wel echter.
Wat ik alleen nog steeds raar blijf vinden is dat de ResolveClientUrl() functie bij de JS files wel werkt en bij de CSS niet. Terwijl ze qua mappen hiërarchie op hetzelfde niveau staan.

Dit wil ik dus nog uitzoeken, want blijft gewoon vaag.

Mappen structuur is nu als volgt:
code:
1
2
3
/map/css/style.css
/js/util.js
/map3/pagina.aspx


en util.css krijg ik wel aangeroepen d.m.v. ResolveClientUrl() en style.css niet. :?
aanroep gebeurt vanuit default.asxp als volgt:
code:
1
2
ResolveClientUrl("~/js/Util.js")
ResolveClientUrl("~/map/css/style.css")


8)7 8)7 8)7

Wellicht belangrijk detail (al zie ik het verschil niet) is dat de js aangeroepen wordt vanuit ClientScriptManager.RegisterClientScriptInclude en de css file een System.Web.UI.HtmlControls.HtmlLink.href betreft.

Wat ik me tevens nog kan herinneren is dat een ~ enkel voor server controls zou werken (dus binnen de ClientScriptManager.RegisterClientScriptInclude), maar correct me if i'm wrong.

[Voor 7% gewijzigd door PdeBie op 10-05-2011 09:14. Reden: toevoeging]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee