Is there any benifit to using one of these methods over the other when resolving paths which start with the tilde (~)?
Generally, what is a better practice, should you be sending relative paths or absolute paths down in your html?
Is there any benifit to using one of these methods over the other when resolving paths which start with the tilde (~)?
Generally, what is a better practice, should you be sending relative paths or absolute paths down in your html?
The difference between ResolveUrl and ResolveClientUrl is that ResolveClientUrl returns a path relative to the current page, ResolveUrl returns a path relative to the site root:
http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx
I would recommend using absolute paths.
Edit: Rick Strahl posted a nice article about this
Edit2: Removed bit about caching. Does not add to the answer and may not necessarily be accurate.
Here's another article that explains the difference between the various ways to resolving paths in ASP.NET -
Note that VirtualPathUtility.ToAbsolute(virtualPath) will throw an exception if a query string is included in the path.
The HttpException message will be along the lines of "'~/YourVirtualPath/YourPage.aspx?YourQueryStringArg=FooBar' is not a valid virtual path."
See Rick Strahl's Web Log:ResolveUrl() without Page and MSDN: VirtualPathUtility.ToAbsolute Method (String)
Another difference I noticed:
Code:
string value = "~/Docs/Hello & World.aspx";
Response.Write(HyperLink1.ResolveClientUrl(value) + "<br/>");
Response.Write(HyperLink1.ResolveUrl(value) + "<br/>");
Result:
Docs/Hello%20&%20World.aspx
/Docs/Hello & World.aspx