[C#] Relatieve URL perikelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 17-09 17:46
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:
  • 0 Henk 'm!

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 17-09 16:00
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:
  • 0 Henk 'm!

Verwijderd

Dan zou ik Server.MapPath gebruiken.
MSDN: Server.MapPath Method

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 17-09 17:46
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:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
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:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 17-09 17:46
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