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的任何插件,请确保你使用设置引用这些世界的顺序。
- 引用jquery库
- 参考其他后续插件库等等…
例如:
- “script src =”js / jquery-1.3.2.min.js“type =”text / javascript“…
- “script src =”js / jqDnR.min.js“type =”text / javascript“…
- “script src =”js / jquery.jqpopup.min.js“type =”text / javascript“…
- “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不在服务器上。 所以你可以:
- 将站点部署到域名的根目录并使用绝对path(最简单的解决scheme)。
- 在服务器控件中插入此链接。
- 在将结果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>