ASP.Net主页面和文件path问题

我试图添加一个脚本引用jQuery在我的母版页,以便它可以为任何页面。 它目前看起来像这样

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

问题是path总是相对于正在执行的aspx页面,所以这只会在“jquery.js”文件位于同一个文件夹中时才起作用。 为了使它工作,我必须改变行:

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

这显然不太理想,因为它只适用于根文件夹下两层的页面。 如果我尝试以下操作,IIS将引发有关意外字符的错误。

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

有任何想法吗?

编辑:我忘了提及,脚本必须在头标记

当我把它添加到我的母版页时,当前的最佳答案会抛出“ ASP.NET Ajax客户端框架无法加载 ”错误。 它从JavaScript而不是.Net编译器抛出。 如果我把ScriptManager移动到它应该是的头部,我得到一个关于需要在表单标签内的ScriptManager的编译错误。

第三个答案在编译器中抛出“ path中的非法字符 ”exception

编辑2:当我将该行添加到我的头标记时,我从IIS中得到此错误。

Controls集合不能被修改,因为控件包含代码块(即<%…%>)

解决:我从下面的答案编辑响应,并把它放在一个asp:ContentPlaceHolder元素

你可以使用ScriptManager

 <asp:ScriptManager ID="ScriptManager1" runat="server"> <Scripts> <asp:ScriptReference Path="~/jquery.js" /> </Scripts> </asp:ScriptManager> 

编辑:如果你绝对需要在你的<head>部分,你可以做一些事情:

 <head> <script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> </head> 

编辑2:根据意见,如果你正在观察

Controls集合不能被修改,因为控件包含代码块(即<%…%>)

您可能需要更改以上使用数据绑定语法:

 <head> <script type="text/javascript" src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script> </head> 

在头部的主页下试试<%#而不是<%=

 <script type="text/javascript" src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>"> </script> 

然后在Page_Load事件下的母版页的代码后面

 Page.Header.DataBind(); 

现在,您可以使用jQuery和JavaScript以及CSS,只需要在ResolveUrl中更改您想要处理CSS,JavaScript,jQuery的文件的pathResolveUrl

如果你不打算给我们asp:ScriptManager或绝对path,那么你可以这样做:

 <script runat="server" type="text/javascript" src='<%= Page.ResolveUrl("~/jquery.js") %>'></script> 

我不知道你们是否find了解决问题的办法。 我正面临同样的问题,并疯狂地弄清楚为什么我的插件上使用“jQuery未定义”错误。 我尝试了从互联网上获得的所有解决scheme,但都没有运气。

但是,我突然想到了一些可能是脚本文件应该是有序的。 所以,我把jQuery引用移到了第一个位置,一切都开始像魅力一样工作。

记住家伙,如果你使用jQuery的任何插件,请确保你使用设置引用这些世界的顺序。

  1. 引用jquery库
  2. 参考其他后续插件库等等…

例如:

  1. “script src =”js / jquery-1.3.2.min.js“type =”text / javascript“…
  2. “script src =”js / jqDnR.min.js“type =”text / javascript“…
  3. “script src =”js / jquery.jqpopup.min.js“type =”text / javascript“…
  4. “script src =”js / jquery.bgiframe.min.js“type =”text / javascript“…

一定要确保你必须把jQuery的引用先放到后面的库中。

希望,这可以解决您的问题,尤其是当您使用MasterPages时。 奇怪的是,无论您使用MasterPages时使用什么顺序,它都能正常工作,但是当您使用MasterPages时,它会以某种方式正确地处理顺序。

祝你好运,快乐的编码,

Vincent D'Souza

看看如何运行一个根“/” 。 这应该解决所有关于未解决的.js文件path的问题。 您基本上重新configurationVS开发服务器运行您的应用程序作为localhost:port/而不是常规localhost:port/application name/使名称parsing工作方式就像它在IIS上一样。

 <script type="text/javascript" src="/full/path/to/jquery.js"></script> 

如果这个脚本标签直接进入浏览器,那么你不可能在那里replace你的网站的根目录。 至less不在服务器上。 所以你可以:

  1. 将站点部署到域名的根目录并使用绝对path(最简单的解决scheme)。
  2. 在服务器控件中插入此链接。
  3. 在将结果HTML发送给客户端之前(使用HttpResponse.Filter)对HTML进行预处理。

您也可以使用<base> HTML标记:

 <base href="http://www.domain.com"></base> 

然后标题部分中的所有链接都与基地址相关:

 <script type="text/javascript" src="scripts/jquery.js"></script> 

如果您有多个发布目的地(如本地开发Web服务器,演示服务器等),则通常很有用。您只需replace该基本URL即可。

 <body> <script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script> </body> 

对于任何页面的文件的绝对path使用它如下:

 <script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>