在Razor中使用站点根相对链接

时间:2011-12-20 10:47:46

标签: c# asp.net razor

我有一个可以正常使用Razor(C#)的网站,当我使用本地测试(WebMatrix IIS)时,所有编码都正常工作。

当我在我的服务器上“在线”时,网站不在网站的根目录

例如:

http:// intranet.mycompany.com/inform

这基本上是我的文件夹结构的“根”,所以我的所有文件夹都从那里开始(css文件default.cshtml ......等等)

我的“_PageStart.cshtml”看到它正确导致当我从链接http://intranet.mycompany.com/inform访问我的网站时,它给出了我在_PageStart.cshtml中配置的布局(它确实显示了布局+渲染的默认值)。 CSHTML)

但没有其他任何东西可以获得正确的路径,例如:

<img src="~/images/logos/hdr.png" />

img持有人在那里我可以看到它,但显示链接已损坏...当我右键单击img持有者并执行属性以查看文件应该显示在哪里时:

http:// intranet.mycompany.com/images/logos/hdr.png

所以它会转到“完整”根而不是相对根......

我该如何解决?

3 个答案:

答案 0 :(得分:96)

您必须在整个应用中使用相对路径:

~无法在静态HTML代码中使用。

你可以写

<img src="@Url.Content("~/images/logos/hdr.png")" />

<img src="../images/logos/hdr.png" />

第一种方法适用于布局文件,当您使用不同长度的路由网址时,相对路径可能会发生变化。

修改

关于正常链接的问题:

在链接到应用中的其他页面时,您不会将视图文件指定为目标,而是将视图呈现为结果的操作。为此,您使用HtmlHelper ActionLink

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

自动为您生成正确的网址:

<a href="YourController/YourAction">Linktext</a>

编辑2

好的,没有MVC - 所以你必须自己生成链接。

你也必须使用相对路径。不要使用/字符开始任何链接!

<a href="linkOnSameLevel.cshtml">Link</a>
<a href="../linkOnParentLevel.cshtml">Link</a>
<a href="subFolder/linkOnOneLevelDown.cshtml">Link</a>

编辑3

使用布局页面时,您可以使用Href扩展名方法生成相对网址:

<link href="@Href("~/style.css")" ...

答案 1 :(得分:4)

使用Url.Content,如下所示:

<img src="@Url.Content("~/images/logos/hdr.png")" />

答案 2 :(得分:0)

我知道默认情况下会添加'~',但我倾向于更改它,以便所有路径都相对于我的代码文件而不是应用程序root,使用“..”例如。 "../images/logos"