【问题标题】:ASP.Net Master Page and File path issuesASP.Net 母版页和文件路径问题
【发布时间】:2010-10-16 09:47:54
【问题描述】:

我正在尝试在我的母版页中添加对 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>

有什么想法吗?

编辑:我也忘了提到脚本必须在 head 标签中

当前的最佳答案在我将其添加到我的母版页时会引发“ASP.NET Ajax 客户端框架无法加载。”错误。它是从 javascript 而不是 .Net 编译器抛出的。如果我将 ScriptManager 移动到应该在的 head 部分,我会收到关于 ScriptManager 需要位于表单标记内的编译错误。

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

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

无法修改 Controls 集合,因为该控件包含代码块(即 )

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

【问题讨论】:

标签: asp.net javascript jquery runatserver


【解决方案1】:
<script type="text/javascript" src="/full/path/to/jquery.js"></script>

【讨论】:

  • 路径离开根目录的问题是,有时您可能会在虚拟目录中开发,然后部署到站点的根目录,反之亦然。
【解决方案2】:

你可以使用ScriptManager:

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

编辑:如果您绝对在您的&lt;head&gt; 部分需要此功能,您可以执行以下操作:

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

编辑 2:根据 cmets,如果您观察到

无法修改 Controls 集合,因为该控件包含代码块(即 )

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

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

【讨论】:

  • 是的,这是我在处理母版页中的路径时编写的许多 ASP.NET 书籍中强烈推荐的方法。
  • 仅供参考,我和我的同事刚刚尝试过。这似乎不适用于嵌套母版页方案在父母版页中。然而,将它移到子母版页就可以了。
  • 这对我几乎所有页面都有效,但有 2 个页面会因某个异常而崩溃:“控件集合无法修改,因为控件包含代码”。解决方案是将标头中包含的脚本从 response.write 代码块更改为数据绑定评估器(即 - 将 leedumond.com/blog/…
  • 使用base href ?
  • @Jagd leedumond.com/blog/… 未找到
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    如果你不去我们 asp:ScriptManager 或绝对路径,那么你可以这样做:

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

    【讨论】:

      【解决方案5】:

      你也可以使用 HTML 标签:

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

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

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

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

      【讨论】:

      • 如何以编程方式更改base href
      【解决方案6】:

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

      但是,突然间我的脑海里闪现出一些东西,可能是脚本文件应该按顺序排列。因此,我将 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 时,无论您使用什么顺序,它都能正常工作,但当您使用时,它会以某种方式要求正确的顺序。

      祝你好运,编码愉快,

      文森特·德索萨

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:
          <body>
          <script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
          </body>
          

          【讨论】:

            【解决方案9】:

            在主页下的 head 部分尝试 &lt;%# 而不是 &lt;%=

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

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

            Page.Header.DataBind();
            

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

            【讨论】:

            • 需要Page.Header.DataBind(); 行才能为我工作,谢谢!
            • 您可能还需要在head 标签上添加runat="server" 属性。
            【解决方案10】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-12-15
              • 1970-01-01
              • 2011-01-24
              • 2017-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多