asp.net 如何在Razor页面中强制网站根目录相对链接

kxeu7u2r  于 2023-07-01  发布在  .NET
关注(0)|答案(3)|浏览(160)

我有一个ASP.NET Razor网站,当我在本地测试(通过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保持器并选择properties来查看文件应该在哪里时,它显示:
http://intranet.mycompany.com/images/logos/hdr.png
因此,它将进入“完整”根目录,而不是网站的相对根目录。
我该怎么弥补?

jdzmm42g

jdzmm42g1#

你必须在整个应用程序中使用相对路径:
~不能在静态html代码中工作。
你可以写

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

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

第一种方法适用于布局文件,当你有不同长度的路由url时,你的相对路径可能会改变。

编辑

关于你的正常链接问题:
当链接到应用中的另一个页面时,您不会指定视图文件作为目标,而是指定渲染视图的操作作为结果。使用HtmlHelper ActionLink

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

自动为您生成正确的URL:

<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

当使用Layout页面时,您可以使用Href扩展方法来生成相对url:

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

enxuqcxy2#

使用Url.Content,如下所示:

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

sq1bmfud3#

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

相关问题