ASP.NET MVC中的CSS和Javascript相对路径混淆

时间:2009-01-12 15:33:29

标签: asp.net-mvc

我的javascript路径适用于此页面: http://localhost:53049/

但不在此页面上: http://localhost:53049/Home/Messages

原因是相对路径不同,前者需要(“js / ...”)而后者需要(“../../ js /...").

我在我的Site.Master文件中包含了我的javascript:

<script type="text/javascript" src="js/jquery.jqGrid.js"></script>
<script type="text/javascript" src="~/js/jquery.jqGrid.js"></script>
<script type="text/javascript" src="<%= this.ResolveClientUrl("~/Scripts/jquery-1.2.6.js") %>"></script>

如何绕过这种相对路径的疯狂,即ASP.NET MVC中最佳实践方式是在Site.Master中设置CSS / Javascript路径,以便无论视图的URL有多深,它们都适用于每个视图碰巧是。

附录:

似乎对于Index视图,任何路径都会起作用,奇怪的是:

<script type="text/javascript" src="/Scripts/jquery-1.2.6.js"></script>
<script type="text/javascript" src="../../Scripts/jquery-1.2.6.js"></script>
<script type="text/javascript" src="../../../Scripts/jquery-1.2.6.js"></script>

但是对于任何其他页面(具有更深URL的页面),这些都不起作用。

这里发生了什么?我们如何在Site.Master中设置一次Javascript路径,它们适用于所有页面?

ADDENUM II:

原来只是jqgrid javascript文件(而不是jquery文件)的问题,显然在该文件中它引用其他javascript文件并感到困惑:

<script type="text/javascript" src="<%= Url.Content ("~/js/jquery.jqGrid.js") %>"></script>

5 个答案:

答案 0 :(得分:15)

您还可以使用Url.Content方法调用来确保正确设置路径。

可以找到示例here

答案 1 :(得分:13)

关于CSS文档中使用的路径:

<强> /Content/site.css

Body {background-image:url('background.jpg');}

CSS文档中的相对路径与CSS文档相关,而不是与正在显示的文档相关。

这些信息让我有些头疼。

答案 2 :(得分:4)

尝试将javascript设置为在开头使用正斜杠,例如“/js/jquery.jqGrid.js”这将设置它们使用根域而不是相对路径。

答案 3 :(得分:1)

jqGrid的解决方案:打开文件jquery.jqGrid.js并找到该行:

var pathtojsfiles = "js/"; // need to be ajusted

正如评论所说,您需要修改该路径,例如对于典型的ASP.NET MVC应用程序,

var pathtojsfiles = "/Scripts/js/"; // need to be ajusted

答案 4 :(得分:1)

您需要添加runat="server"并指定如下的绝对路径:

<script type="text/javascript" runat="server" src="~/js/jquery.jqGrid.js"></script>]