惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
WordPress大学
WordPress大学
C
Check Point Blog
GbyAI
GbyAI
U
Unit 42
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
博客园 - 【当耐特】
美团技术团队
小众软件
小众软件
S
SegmentFault 最新的问题
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog

博客园 - J. Lin

据可靠小道消息VS 2008 SP1 RTM 将在下周一发布 Configuration Section Designer 自定义配置设计器 Linq to Sql: 批量删除之投机取巧版 [CSS Hack] border-color:transparent & filter+ClearType bug ASP.NET AJAX 1.0 & AJAX Control Toolkit 在iframe中的"access denied"错误 Aptana使用入门一:Code Assist What we can do in "Page" class 页面基类功能扩展汇总 不可多得的Javascript(AJAX)开发工具 - Aptana 右键菜单快速打开VS 2005 Website项目 SQL Server 2005 SP1 安装问题 设置asp.net程序在web.config被修改后是否重启 VS2005 Add-in:CSS Properties Window Design Templates for ASP.NET 2.0 Security Guidelines: ASP.NET 2.0 [目录] & [How to列表] ASP.NET 2.0 Security FAQs 翻译计划 [ASP.NET 2.0 Security FAQs]如何在membership中强制使用高安全性的密码 [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role Web.config 文件中的“智能感知” 用宏自动生成Web.sitemap文件(ASP.NET 2.0)
在MastPage中引用脚本资源
J. Lin · 2005-12-16 · via 博客园 - J. Lin

我们通常会这样引用脚本资源:

<html>
<head runat="server">
    <script type="text/javascript" src="JS/script_include.js"></script>
</head>
<body>
</body>
.
</html>

当然可以把 <script type="text/javascript" src="JS/script_include.js"></script> 写到页面的任何位置,但是写在head中是非常标准的做法,这样写会有很多好处,比如“可见性”的问题。

好了现在我们有了MasterPage,这个非常好,我们只要在MasterPage里引用一些常用的脚本文件,就不用每个页面去写了。
如果还是像上面那样引用脚本文件:
MasterPage.master

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <script type="text/javascript" src="JS/script_include.js"></script>
</head>
<body>
    
<form id="form1" runat="server">

    </form>
</body>
</html>

问题来了,如果在一个不同目录的页面中(比如:Admin/Default.aspx)使用上面这个MasterPage,
<script type="text/javascript" src="JS/script_include.js"></script>
这段会被原封不动的放到生成的页面中,很显然引用失败了。

我们知道有“~”这个东西非常好,很想用它,是不是可以这样写呢:
<script type="text/javascript" src="~/JS/script_include.js"></script>
当然不行,只有runat=server的control“~”,像上面这样写只会原封不动把~/JS/script_include.js输出到客户端。是不是要改成这样:
src="<%= Request.ApplicationPath %>/JS/script_include.js">
这样编译都通不过,看到上面那个<head runat="server"> 没?你还不能把哪个runat="server"去了,MasterPage、Theme全靠它。没办法只能从head里搬出来

<head runat="server">
</head>
<script type="text/javascript" src="<%Request.ApplicationPath %>/JS/script_include.js"></script>
<body>
    
<form id="form1" runat="server">
.......

现在这样是能用了,但是有两个问题。首先,引用没有放在head里;其次,如果你把程序放在根目录下的话,就会变成//JS/script_include.js。That's too bad, and ugly.

Atlas 给我们提供了一种优雅的解决方法。We can use it like that:

<head runat="server"> 
    
<atlas:Script ID="Script1" runat="server" Path="~/JS/script_include.js" />
</head>

上面的那个atlas:Script 是runat=server的,所以可以放心的使用"~",而且引用也待在head里了。当然首先要把你的程序配置成可以使用Atlas,具体方法可以参考atlas.asp.net上的相关内容。