忽略 ASP.net 中的 Javascript、CSS 和图像文件路由

Posted

技术标签:

【中文标题】忽略 ASP.net 中的 Javascript、CSS 和图像文件路由【英文标题】:Ignoring Javascript, CSS and image files routing in ASP.net 【发布时间】:2014-02-12 16:00:25 【问题描述】:

我已将 Stack Overflow 上下颠倒,但不幸的是,没有一个答案对我有帮助。

我有一个使用 Visual Studio 提供的 IIS 在我的本地 PC 上完美运行的 Web 应用程序,但是当我将此应用程序部署到服务器时,只有 CSS 才能正确显示。

文件的文件夹结构如下:

Root(此文件夹在服务器上名为Knowledge ManagementCSS JS 媒体 上传 文档 图片 用户

我的代码,至少母版页头部分看起来像这样:

<head runat="server">
    <link href="CSS/Style.css" rel="stylesheet" />
    <script src="/JS/jQuery203Min.js"></script>
    <script src="/JS/jQueryUI1103Min.js"></script>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

但是,浏览器会这样生成它:

<head>
    <link href="../../CSS/Style.css" rel="stylesheet" />
    <script src="JS/jQuery203Min.js"></script>
    <script src="JS/jQueryUI1103Min.js"></script>    
    <script src="/JS/HomeArticles.js"></script>
</head> 

问题是除了 CSS 之外,JS 文件夹中的任何文件和 Media 或 Uploads 文件夹和子文件夹中的文件都没有正确生成。

问题是,如果我在图像 src 属性前添加“斜线”,图像将获得位置 http://localhost/Media/Discussion.png,如果我不添加“斜线”,则图像位置是 http://localhost/Uploads/Users/HrvojeFadiga.jpg,而它应该是 @987654325 @

这是一个带有图像的代码示例:

<div class="profileInfoWrapper">
    <img src="/Uploads/Users/<%=article.User.PhotoLocation %>" />
    <span class="postInfo">
        <img src="/Media/Rating.png" /><%= GetArticleRating(article.idArticle) %>
    </span>
    <span class="postInfo">
        <img src="/Media/Visitors.png" /><%= GetArticleViews(article.idArticle) %>
    </span>
    <span class="postInfo">
        <img src="/Media/Comments.png" /><%= GetArticleComments(article.idArticle) %>
    </span>
</div>

仅供参考,Global.asax 不包含任何忽略文件路由的规则,但默认添加的 .axd 文件除外。

【问题讨论】:

"问题是如果我在图像 src 属性前添加“斜线”" - 你能显示包含图像元素的代码吗?另外,如果您从脚本 src 属性中删除“/”,这些链接仍然不起作用吗? @Fresh 我已经添加了带有图像元素的代码。删除斜线没有帮助。我不知道这里的 Windows Server 是否存在问题,或者因为在测试环境(本地使用 IIS Express)中一切正常。 @Hrvach 您的母版页在哪里?在某个文件夹中? @AfnanAhmad 母版页位于根文件夹中。 【参考方案1】:

我可以通过添加runat=server 属性并在定义文件源之前使用倾斜(~) 对其进行排序。例如:

&lt;link href="~/CSS/Style.css" rel="stylesheet" runat="server" /&gt;

同样适用于javascript 文件。

【讨论】:

很遗憾,在 javascript 文件中添加 runat 标记会导致错误。 你试过&lt;script src="~/JS/jQuery203Min.js" runat="server"/&gt;吗?注意/&gt;,没有结尾&lt;/script&gt; 是的,我有 - 还是一样。我真的很困惑。我什至尝试将 .js 文件添加到 CSS 文件夹,因为 .css 文件按预期工作,但也没有帮助。 这对我来说真的很奇怪。考虑改用捆绑包。 我相信我已经找到了一种解决方法(经过近 10 天的调整、尝试等)! :) 似乎将脚本添加到 ScriptManager 可以解决问题 - 我必须对其进行一些测试,但会让您知道!感谢您的帮助!【参考方案2】:

对于脚本和样式的任何 URL,您需要像这样调用 ResolveUrl:

<link href="<%= ResolveUrl("~/CSS/Style.css") %>" rel="stylesheet" />

【讨论】:

【参考方案3】:

试试这个。没有“~”它也可以工作,但您可以添加它只是为了引用始终是您的项目解决方案的根目录。因此,通过使用波浪号“~”,您可以正确指定 css 和 js 文件的位置。

<link href="~/CSS/styles.css" type="text/css" rel="stylesheet"/>
<script src="~/JS/jScript.js" type="text/javascript"/>

对于您存储在上传文件夹中的图像也是如此。您可以使用它访问它

<img src="~/Uploads/Images/youImage.gif" />

【讨论】:

【参考方案4】:

像下面这样尝试,它对我有用...

<script src="JS/jQuery203Min.js" type="text/javascript"></script>
<script src="JS/jQueryUI1103Min.js" type="text/javascript"></script>
<link href="CSS/Style.css" rel="stylesheet" type="text/css"/>

【讨论】:

这是我尝试的第一件事。不幸的是,它没有帮助。【参考方案5】:

首先,感谢大家的回复。在玩了几天之后,我终于想出了如何让一切正常工作。

JS 问题

我通过向 .aspx 页面添加 ScriptManager 控件并在其中添加 JS 文件解决了 JS 问题。

<asp:ScriptManager ID="smScripts" runat="server">
     <Scripts>
          <asp:ScriptReference Path="JS/jQuery203Min.js"/>
     </Scripts>
</asp:ScriptManager>

由于某些原因,CSS 文件“开箱即用”,所以我保持不变。

图像问题

我已经设法通过避免硬编码链接到图像并将&lt;%: Page.ResolveUrl("~/Media/Image.png") %&gt; 添加到&lt;img&gt; 标记的src 属性来解决图像问题。我想我应该对所有我不想路由的东西都这样做。这可以用于 CSS 文件、JS 文件等所有内容。但是,(即使这应该可以完美运行)我在 JS 文件中遇到了一些奇怪的问题,这就是使用 ScriptManager 的原因。

页面链接问题

起初我没有意识到我的链接都不起作用,所以我认为问题是半硬编码的链接,由于某种原因,即使我按照定义的相同方式硬编码路由,也不会正确路由Global.asax 文件。我仍然不确定为什么这不起作用。

解决方案是使用&lt;%: Page.GetRouteUrl("RouteName", new routeParameter1 = routeParameter1Value, routeParameter2 = routeParameter2Value) %&gt; 生成链接,一切都会正常工作。

【讨论】:

【参考方案6】:

目录/虚拟目录设置可能是罪魁祸首。

在 Google Chrome 中查看您的页面,然后“检查元素”。滚动到顶部并包含您的 .JS 文件。您可以单击它们以查看它们尝试链接到的 URL。服务器上的路径很可能与您的本地副本略有不同。

【讨论】:

以上是关于忽略 ASP.net 中的 Javascript、CSS 和图像文件路由的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 中的 Asp.Net 表单 DefaultButton 错误

忽略 ASP.NET Core 3.1 中的 WCF 证书错误

ASP.Net Core Tag Helper 链接忽略当前文化

ASP.NET 中的 Javascript 命名空间声明

ASP.NET 用户控件中的 Javascript 函数

从 ASP.NET Core Blazor 中的 .NET 方法调用 JavaScript 函数