Precisei esses dias encontrar o caminho relativo de um recurso em uma página web. Pensei "o .Net framework já faz isso". Me lembrei do controle Image, que permite utilizar o til (~) para indicar a raiz e portanto o caminho relativo. Com ele, uma imagem na pasta "img" chamada imagem.gif ficaria com a string de caminho "~/img/imagem.gif", seria resolvida para "img/imagem.gif" no caso de uma página chamando da raiz e "../img/imagem.gif" caso a página de chamada morasse em um diretório descendente.
Fui ao Reflector. Descobri que o atributo/propriedade ImageUrl que indica o caminho relativo da imagem é realmente "traduzido" para caminho relativo. O método responsável pela tradução é o ResolveClientUrl, da classe System.Web.UI.Control.
Para utilizar o método, basta colocar o caminho a ser descoberto. Em uma página ASPX, por exemplo, onde você quer descobrir o caminho relativo de um arquivo flash, a tag param ficaria assim:
<param name="movie" value="<% =Me.ResolveClientUrl("~/flash/banner.swf") %>" />
Isso é útil especialmente para o flash, porque não há um controle nativo no flash, e se você usar uma master page vai ter problemas caso ela seja utilizada por alguma página aspx em um sub diretório. Imagens são mais fáceis, traduzem sozinhas.
Simples e prático, mas não achei muita documentação por aí... Analisei também a implementação interna e percebi que a Microsoft utiliza por debaixo dos panos a classe System.Web.Util.UrlPath, mas ela é marcada como "Friend"-VB/"internal"-C#. Essa classe tem muitos métodos interessantes, mas estão todos escondidos de nós, que não estamos codificando o .Net Framework. Porque será?
Enfim, problema resolvido e em pouco tempo. Nada como um framework bem desenvolvido.
Postado na(s) categoria(s)
ASP.Net
pelo
Giovanni Bassi em 27 de maio de 2008 às 04:00
| Tags:
asp.net
Ninguém avaliou. Dê sua nota!
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5