ASP.Net主页面和文件路径问题

时间:2009-03-30 15:18:17

标签: asp.net javascript jquery runatserver

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

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

问题是路径始终相对于正在执行的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移动到应该是的head部分,我会收到有关需要在表单标记内的ScriptManager的编译错误。

第三个答案从编译器抛出“路径中的非法字符。”异常

编辑2:当我将该行添加到我的head标签时,我从IIS收到此错误。

无法修改Controls集合,因为该控件包含代码块(即&lt;%...%&gt;)

已解决:我从下面的答案中获取了已编辑的回复并将其放在 asp:ContentPlaceHolder 元素

10 个答案:

答案 0 :(得分:110)

您可以使用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集合,因为控件包含代码块(即&lt;%...%&gt;)

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

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

答案 1 :(得分:25)

在主题部分

下的母版页中尝试使用<%#代替<%=
<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>

然后在Page_Load事件

下的母版页代码背后
Page.Header.DataBind();

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

答案 2 :(得分:10)

如果您不打算使用asp:ScriptManager或绝对路径,那么您可以这样做:

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

答案 3 :(得分:3)

我不知道你们是否找到了问题的解决方案。我遇到了同样的问题并且疯狂地弄清楚为什么我在使用的插件上得到“jQuery is undefined”错误。我尝试了从互联网上获得的所有解决方案,但根本没有运气。

但是,我的脑海中突然出现了可能是脚本文件的东西应该是有序的。所以,我把jquery引用到第一个位置,一切都像魅力一样开始工作。

请记住,如果您使用任何带有jquery的插件,请确保使用以下顺序设置对这些fiels的引用。

  1. 对jquery库的引用
  2. 引用其他后续插件库等等......
  3. e.g:

    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“...
    5. 始终确保必须首先将jquery引用放在后面的库中。

      希望,这可以解决您的问题,尤其是在使用MasterPages时。非常奇怪的是,无论您在不使用MasterPages时使用何种顺序,它都有效,但是当您这样做时,它会以某种方式确定正确的顺序。

      祝你好运,编码愉快,

      Vincent D'Souza

答案 4 :(得分:3)

看看How to Run a Root “/”。这应解决有关未解析的.js文件路径的所有问题。您基本上将VS Dev服务器重新配置为以localhost:port/运行您的应用程序,而不是常规localhost:port/application name/使名称解析工作方式与IIS上的相同。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果此脚本标记直接转到浏览器,那么您不太可能在那里替换您网站的根目录。至少不在服务器上。所以你可以:

  1. 将站点部署到域的根目录 命名并使用绝对路径 (最简单的解决方案)。
  2. 插入此内容 与服务器控件链接。
  3. 之前预处理生成的HTML 发送给客户端(用 HttpResponse.Filter)。

答案 7 :(得分:0)

您还可以使用&lt; base&gt; HTML标记:

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

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

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

当您有多个发布目的地时,通常很有用,例如本地开发者服务器,演示服务器等。您只需替换该基本URL。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

对于任何页面的文件的绝对路径,请使用以下命令:

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