【问题标题】:what's the difference between <% %> and <script language="vbscript" runat="server"> in classic asp?经典asp中 <% %> 和 <script language="vbscript" runat="server"> 有什么区别?
【发布时间】:2010-11-29 16:31:40
【问题描述】:
我在网上找不到太多文档
到目前为止,明显的区别似乎是你不能使用“script”标签混合html和vbscript
例如,这样就可以了
文字
<% 结束子 %>
但你应该使用脚本标签
公共子 display_literal2()
response.write "literal2"
结束子
脚本>
在这个页面上
http://www.newobjects.com/pages/ndl/alp/asp-structure.htm
它是这么说的
在经典 ASP 中,以页面的默认脚本语言(即 标记假定的语言)编写的脚本是第二个执行的 - 例如 标记中的所有脚本代码在所有
但我做了几个测试,但无法验证...
我问是因为我有一个脚本(我现在手头没有)使用 给我一个错误,将其更改为
无论如何,我想我们应该将
【问题讨论】:
标签:
asp-classic
vbscript
runatserver
【解决方案1】:
首先,您需要了解服务器端 script 标记的处理方式有所不同,具体取决于指定的语言是否与页面的默认语言相同。
顺序是这样的:-
- 运行
<script runat="server" 标记中指定语言与默认语言不匹配的所有脚本。这些是按文档顺序执行的。
- 运行默认脚本。这意味着在页面中有静态内容(不在
runat="server" 标签或<% %> 内的内容)和<% %> 中的任何干预代码显然再次按文档顺序执行对响应的隐含写入。
- 在语言与默认脚本语言匹配的
<script runat="server" 标记中找到的全局级别运行任何代码。
请注意,所有脚本在执行阶段 1 之前都有一个初始解析,因此可能由阶段 3 中运行的脚本定义的任何函数都可用于从阶段 1 调用。
【解决方案2】:
我刚刚在这个问题上遇到了一个问题,出于实际目的, 标记内的代码 执行 在 内的代码之前.
函数和过程的声明似乎不会受到 IIS 理解经典 ASP 标记方式的这种差异的影响——至少因为我不使用“Server.执行”。
我的服务器在 Request.ServerVariables("SERVER_SOFTWARE") 中运行 Microsoft-IIS/5.1。