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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Security Latest
Security Latest
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AI
AI
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
S
Secure Thoughts
PCI Perspectives
PCI Perspectives
Simon Willison's Weblog
Simon Willison's Weblog
D
DataBreaches.Net
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
V
V2EX
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tenable Blog
T
Threat Research - Cisco Blogs
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
F
Full Disclosure
H
Help Net Security
博客园 - Franky
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
O
OpenAI News
S
Securelist

博客园 - 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上的相关内容。