Reputation: 99774
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?
Upvotes: 25
Views: 9536
Reputation: 6962
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.
http://west-wind.com/weblog/posts/132081.aspx
Upvotes: 26
Reputation: 1019
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
Upvotes: 1
Reputation: 13537
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)
Upvotes: 4
Reputation: 4289
Here's another article that explains the difference between the various ways to resolving paths in ASP.NET -
Different approaches for resolving URLs in ASP.NET
Upvotes: 5