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

IT技术 asp.net javascript jquery runatserver
2021-03-13 23:44:57

我正在尝试在我的母版页中添加对 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 移动到它应该在的头部部分,我会收到一个关于 ScriptManager 需要位于表单标签内的编译错误。

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

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

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

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

6个回答

你可以使用一个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>
仅供参考,我的同事和我刚刚尝试过这个。这似乎不适用于父母版页中的嵌套母版页方案然而,将它移动到子母版页就成功了。
2021-04-20 23:44:57
是的,这是我在处理母版页中的路径时编写的许多 ASP.NET 书籍中强烈推荐的方法。
2021-04-23 23:44:57
这在我几乎所有的页面上都对我有用,但是对于 2 个页面会因某些异常而爆炸:“无法修改控件集合,因为控件包含代码”。解决方案是将包含在标头中的脚本从 response.write 代码块更改为数据绑定评估器(即 - 将 <%= 更改为 <%# )。我敢猜测,这是 MS 试图阻止 http 标头攻击的某种类型的尝试。可以在以下位置找到对这个简单修复的更好解释:leedumond.com/blog/...
2021-04-24 23:44:57
使用base href?
2021-05-04 23:44:57
@Jagd leedumond.com/blog/...未找到
2021-05-04 23:44:57

尝试<%#而不是<%=在头部部分下的母版页中

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

然后在Page_Load事件下的母版页的代码隐藏中

Page.Header.DataBind();

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

需要Page.Header.DataBind();线路才能为我工作,谢谢!
2021-04-19 23:44:57
您可能还需要runat="server"head标签添加属性
2021-05-06 23:44:57

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

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

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

但是,突然间我想到了一些可能是脚本文件应该按顺序排列的东西。所以,我将 jquery 引用移动到第一个位置,一切都开始像魅力一样工作。

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

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

例如:

  1. “脚本源代码=“js/jquery-1.3.2.min.js”类型=“文本/javascript”...
  2. “脚本源代码=“js/jqDnR.min.js”类型=“文本/javascript”...
  3. “脚本源代码=“js/jquery.jqpopup.min.js”类型=“文本/javascript”...
  4. “脚本源代码=“js/jquery.bgiframe.min.js”类型=“文本/javascript”...

始终确保您必须首先将 jquery 引用放在随后的库中。

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

祝你好运,快乐编码,

文森特·德索萨

看看如何运行根“/”这应该可以解决有关未解析.js文件路径的所有问题您基本上是重新配置 VS Dev 服务器来运行您的应用程序,localhost:port/而不是localhost:port/application name/像在 IIS 上那样常规地 使名称解析工作。