2009-01-12 96 views
21

我的JavaScript路径此页面上的工作: http://localhost:53049/CSS和Javascript相对路径混乱ASP.NET MVC

但不是此页上: 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的最佳实践方式来设置CSS/Site.Master中的Javascript路径,以便它们适用于每个视图,无论该视图的URL有多深。

附录:

看来,对于索引视图,任何路径将工作,奇怪的是:

<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> 
+2

我们不能看到的东西从你的本地主机机发布。 – jacobangel 2009-01-12 15:38:09

+0

特雷斯大声笑 - 甚至没有注意到 – annakata 2009-01-12 15:48:05

+3

我知道(希望)你不能在我的本地机器上看到他们,我只是不知道如何使这个编辑器的http非链接。要点是如果URL中有目录,则路径不起作用。 – 2009-01-12 15:55:36

回答

15

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

例子可以发现here。在CSS文件中使用

3

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

13

关于路径:

/Content/site.css

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

在CSS文件的相对路径相关的CSS文件,不被显示的文档。

这些信息为我省去了一些麻烦。

1

的jqGrid的解决办法:打开文件jquery.jqGrid.js并找到行:

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

正如评论说,你需要编辑的路径,例如对于典型的ASP。NET MVC应用程序,

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

您需要添加runat="server",并指定这样的绝对路径:

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