65.9K
CodeProject is changing. Read more.
Home

ASP.NET ResolveUrl Without Page

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3 votes)

Jun 2, 2011

CPOL
viewsIcon

41026

Using ResolveUrl without Page

The Quick Answer

System.Web.VirtualPathUtility.ToAbsolute("~/default.aspx");

Don't forget the ~/ (tilde) before the page name.

The Lengthy Explanation

Assume that we want to redirect to default.aspx that's on the site root:

Response.Redirect("default.aspx");

If we're on a page that's also on the root, it will map to http://www.mysite.com/default.aspx and work correctly.

The Problem

The problem comes when we're not on the site root but inside a child folder. Let's say we're on a page that's inside the /Administration folder, the same line will map to http://www.mysite.com/Administration/default.aspx and that of course won't resolve and return a glorious 404: Page Not Found.

The Solution

Solving this is easy using the ResolveUrl method:

Response.Redirect(ResolveUrl("~/default.aspx"));

Where This Won't Work

ResolveUrl is only available within the context of a Page or a UserControl; if you're, for instance, inside an ASHX, this method isn't available. In these cases, you have to use the following line to do the job:

System.Web.VirtualPathUtility.ToAbsolute("~/default.aspx");

We must include the tilde before the page name to make it a relative path, otherwise this method will throw an exception.