我的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>
答案 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>]