ASP.Net 母版页和文件路径问题

Posted

技术标签:

【中文标题】ASP.Net 母版页和文件路径问题【英文标题】:ASP.Net Master Page and File path issues 【发布时间】: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 元素中

【问题讨论】:

这个问题的解决方案docs.microsoft.com/en-us/aspnet/web-forms/overview/… 【参考方案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】:

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

    将站点部署到域的根目录 命名并使用绝对路径 (最简单的解决方案)。 插入此 与服务器控制链接。 在之前预处理生成的 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 中使用任何插件,请确保使用以下设置对这些字段的引用的顺序。

    对 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 时,无论您使用什么顺序,它都能正常工作,但当您使用时,它会以某种方式要求正确的顺序。

祝你好运,编码愉快,

文森特·德索萨

【讨论】:

【参考方案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> 

【讨论】:

以上是关于ASP.Net 母版页和文件路径问题的主要内容,如果未能解决你的问题,请参考以下文章

母版页中的 ASP.NET CSS 文件

ASP.Net,母版页:每页样式表

ASP.NET内容页中访问母版页中的对象

关于asp.net中页面事件加载的先后顺序

asp.net 母版页的 JCrop 问题

嵌套母版页和 CSS 文件