views:

1075

answers:

2

The problem

I'm running into the typical virtual-directory dilemma in that you have some paths on your ASP.Net application and you deploy the app in a IIS virtual directory. Then all paths relatives to the "web root" (f.i., "/images") doesn't work because the app is in a virtual directory path.


The solutions

A. Make the "images" folder a virtual directory. This way "/images" will always exist.

B. Use "<%=Request.ApplicationPath%>/Imagenes" as the source of my images. This works great in IIS but I can't see it in design-time nor in debug-time.

This solution also include these instructions:

  • System.Web.VirtualPathUtility.ToAbsolute
  • ResolveClientUrl
  • Request.ApplicationPath

C. Use relatives paths to the current control/page. This is know exactly where the images folder is relative to my current file (without go to the root. So I would use things like "", "../", "../../" and so on.


The solution I'm looking for

Said that. I don't like these solutions. I would want a solution in the web.config file or in IIS. Some conf intruction I write in the web.config file that tells IIS where my application resides actually (virtual directory).

Any advice?

+3  A: 

Are you using the tilde (~) for your paths where you can?

~ refers to the root of the virtual Web application....

~/images for example.

klabranche
alternatively, for non-server-side img elements, you can use the "/" character to refer to the root, as in <img src="/images/back.png" />.
David Andres
@klabranche, the tilde (~) is for server-side controls and only usable in server-side code (http://msdn.microsoft.com/en-us/library/ms178116.aspx)@DavidAndres, The slash "/" assumes your app is in the Web Site root (not for virtual directories). (http://msdn.microsoft.com/en-us/library/ms178116.aspx)> A site-root relative path, which is resolved against the site root (not the application root).
David Elizondo
@dealmo - I did say where you can.... I understand you are looking for an alternate approach to the one's you listed. I was just making sure you have at least done what you can where you can. :)
klabranche
@klabranche - sorry, and thanks. In fact I used it in a couple of controls. But I want to resolve it in aspx pages and css files :/
David Elizondo
No need to apologize. :)
klabranche
@daelmo: You're correct. The images either need to be placed in inetpub\wwwroot\images or the src attribute of the img element should be updated to "/virtual directory/images/back.png" Thanks for the update.
David Andres
A: 

If it's just for css files on the client side then using the url directive makes the path relative to that of the style sheet rather than the page:

h1#title { background: url('dog.gif') no-repeat 0 0; } 

Also if you're on asp.net mvc then you have access to:

<script src="<%= Url.Content("~/scripts/new.js") %>" type="text/javascript"></script>
Giles Roberts