Using site root relative links in Razor

You have to use relative paths all over your app:

~ won’t work within static html code.

You can write

<img src="https://stackoverflow.com/questions/8574237/@Url.Content("https://stackoverflow.com/questions/8574237/~/images/logos/hdr.png")" />

or

<img src="https://stackoverflow.com/questions/8574237/images/logos/hdr.png" />

The first approach is good for layout files where your relative path might be changing when you have different length routing urls.

EDIT

Regarding to your question about normal links:

When linking to another page in your app you don’t specify the view file as the target but the action which renders a view as the result. For that you use the HtmlHelper ActionLink:

@Html.ActionLink("Linktext", "YourController", "YourAction")

That generates the right url for you automatically:

<a href="https://stackoverflow.com/questions/8574237/YourController/YourAction">Linktext</a>

EDIT 2

Ok, no MVC – so you have to generate your links yourself.

You have to use relative paths, too. Don’t start any link with the / character!

<a href="https://stackoverflow.com/questions/8574237/linkOnSameLevel.cshtml">Link</a>
<a href="http://stackoverflow.com/linkOnParentLevel.cshtml">Link</a>
<a href="subFolder/linkOnOneLevelDown.cshtml">Link</a>

EDIT 3

When using Layout pages you can use the Hrefextension method to generate a relative url:

<link href="https://stackoverflow.com/questions/8574237/@Href("~/style.css")" ...

Leave a Comment

tech