Classic ASP 框架 2.0 - 让你的 Classic ASP 代码像 ASP.NET 一样运行






4.60/5 (17投票s)
2004 年 8 月 8 日
5分钟阅读

206857

2098
Classic ASP 框架 (CLASP) 将允许您像使用 ASP.NET 一样来构建您的 ASP 页面。
屏幕截图
DataGrid
按钮
调试/跟踪
下拉列表/列表
RichTextBox
选项卡
文本框
引言
这是 CLASP 的 2.0 版本,也是继 Classic ASP Framework 之后的后续文章。Classic ASP 框架允许您像使用 ASP.NET 一样来构建您的 ASP 页面。它完全事件驱动,并且拥有您可能需要的大部分控件,如文本框、复选框(和复选框列表)、单选按钮、标签、下拉列表、列表、数据网格、数据重复器、数据列表、富文本框、计时器、字段验证器、选项卡等等!
支持 ViewState
(可在页面级别覆盖)
- 客户端:隐藏字段中。
- 服务器端:Session 变量中。
- SQL Server:SQL Server 表中。
- 自定义:编写您自己的 Viewstate 持久化处理程序!
- 不同实现:COM(最快)和纯 ASP(稍慢)。服务器端和 SQL Server 不需要 COM 实现。
能够从服务器代码注册客户端脚本和客户端事件。
例如。 Page.RegisterEventListener cmdSave,"onclick","TestFnc"
。所有事件都会被堆叠/链接
并以冒泡的方式调用,所以您可以为同一个对象设置多个事件监听器!!!。
其他不错的特性包括 PageController
概念,它允许您以模板化的方式构建页面,支持角色级别的身份验证和授权。
2.0 版本的新特性?
在此文章中提到的更改和改进太多了,无法一一列举。以下列出了一些
- 事件模型尽可能匹配 ASP.NET(页面级别和控件生命周期级别)
- 性能大幅提升。
- 所有控件的改进。更多的属性和自定义选项。
- 新控件,如富文本框、计时器、面板、验证控件(就像 ASP.NET 一样)
- 更多的配置选项,如可插拔的 Viewstate 持久化和实现。
- 更多的示例。
- 带有帮助的示例站点。
- PageController 模型,用于构建支持角色级别身份验证/授权的模板页面。
- 可重用的 JavaScript 库(clasp, clasp.form, clasp.events, clasp.validation)
- 等等等等等等
想亲眼看看吗?请访问我们的 示例 网站。
背景
CLASP 非常适合需要维护或创建新 ASP 页面的开发人员。它将简化您的编码,让创建和维护页面变得轻而易举,当您需要迁移到 ASP.NET 时,由于编码风格几乎相同,迁移所需时间将大大缩短。主要优势是
- 编码时间**大大减少**,代码更具可读性,易于维护。
- 全面的控件列表。
- 灵活的事件驱动模型(类似于 ASP.NET 中的 AutoEventWireUp)
- 所有内容的源代码。
- 开源 --- 免费 ---
- 简化了向 ASP.NET 的迁移。
使用代码
使用代码非常简单。页面结构
CLASP 页面按照以下方式构建(除非您使用 Page Controller)
- 包含 WebControl.asp 页面
- 包含页面将使用的任何 WebControl 文件(例如 Server_TextBox.asp)
- 包含页面将使用的任何额外文件。
- 执行以下 ASP 代码:
Page.Execute
- 编写您的 HTML。您可以将 HTML 与服务器控件混合(例如
<TD><%txtFirstName%> </TD>)您**必须**使用以下 ASP 代码开始您将呈现 HTML 表单的区域以及呈现 HTML 输入控件的 WebControls:
Page.OpenForm
并以Page.CloseForm
结束。这一点至关重要,这些函数会呈现 HTML 表单并包含 CLASP 使用的所有隐藏字段。 - 接下来是您的 Code-Behind 或服务器代码,它可以放在单独的文件中,也可以放在页面底部。
- 包含您的 WebControl 变量声明(例如
Dim txtFirstName, txtLastName
) - 包含您的页面级别变量(例如
Dim mStatus
) - 添加
Public Function Page_Init()
并在其中初始化所有 WebControls(例如Set txtFirstName = New_ServerTextBox("txtFirstName")
)和模块级别变量(例如mStatus= 0
) - 添加您想覆盖的任何其他页面事件,例如
Page_Controls_Init
(仅执行一次,非常适合初始化启用了 Viewstate 的控件,此事件中的代码仅在If Not Page.IsPostBack
时执行),Page_Load
,Page_LoadViewState
等。注意:请记住,Viewstate 仅在 Page_LoadViewState 及之后的事件中可用。 - 编写您的事件处理程序,例如
cmdSave_OnClick
,txtFirstName_OnTextChange
。 - 编写您的支持函数。
- 就是这样!您已完成!。
CLASP 中的事件顺序
查看 WebControl.asp 中的 Page.Execute -"Sub Main()"
- 例程将让您非常清楚 CLASP 如何处理每个请求。CLASP 页面的生命周期的概览如下(您可以覆盖并处理蓝色高亮的事件)
-
Page_Authenticate_Request
-
Page_Authorize_Request
-
Page_Init
-
If Not Page.IsPostBack Then Page_Controls_Init
-
If Page.IsPostBack Then Page_LoadViewState
-
If Page.IsPostBack Then ProcessPostBackData
-
Page_Load
-
If Page.IstPostBack Then Page.HandleServerEvent "RaiseChangedEvents"
-
If Page.IsPostBack Then Page.HandleClientEvent
(通过执行事件的处理程序来处理 PostBack) -
Page_PreRender
-
Page_SaveViewState
-
Page_Terminate
PageControler
模型,您还将拥有以下事件: Page_Configure
,Page_RenderHeader
,Page_RendeForm
,Page_RenderFooter
,并且它将自动处理 Page_AuthenticateRequest
和 Page_AuthorizeRequest
。CLASP 示例站点中有使用 Page Controller 的实现示例。控件的生命周期是:(这会自动发生并且是透明的)
-
Class_Initialize
-
OnInit
- 您需要订阅以接收此事件 - -
ReadProperties(v)
- 仅当EnableViewState = True
-
OnLoad
- 您需要订阅以接收此事件 - -
ProcessPostBack
- 您需要订阅以接收此事件 - -
HandleClientEvent(e)
- 仅当是 PostBack 事件的目标 -
WriteProperties(v)
- 仅当EnableViewState = True
-
Render
-
Class_Terminate
这里有一个代码示例。对于那些已经使用 ASP.NET 编程的开发者来说,您会发现代码看起来非常像一个 ASP.NET 页面(有一些明显的区别...)。
<!--#Include File = "..\WebControl.asp" -->
<!--#Include File = "..\Server_Button.asp" -->
<!--#Include File = "..\Server_CheckBox.asp" -->
<!--#Include File = "..\Server_DropDown.asp" -->
<!--#Include File = "..\Server_Label.asp" -->
<!--#Include File = "DBWrapper.asp" -->
<HTML>
<HEAD>
<TITLE>Samples</TITLE>
<LINK rel="stylesheet" type="text/css" href="Samples.css">
</HEAD>
<BODY>
<!--#Include File = "Home.asp" -->
<%Page.Execute%>
<Span Class="Caption">DROPDOWN EXAMPLES</Span>
<%Page.OpenForm%>
<%lblMessage%><HR>
<%chkHideShow%> | <%chkAutoPostBack%> | <%chkListBox%><HR>
<%cboDropDown%>
<HR>
<%cmdAdd%> | <%cmdRemove%>
<%Page.CloseForm%>
</BODY>
</HTML>
<%
'--Controls Declaration
Dim lblMessage
Dim cmdAdd
Dim cmdRemove
Dim chkHideShow
Dim chkAutoPostBack
Dim chkListBox
Dim cboDropDown
'--Page Events
Public Function Page_Init()
Page.DebugEnabled = False ' True/False
Set lblMessage = New_ServerLabel("lblMessage")
Set cmdAdd = New_ServerLinkButton("cmdAdd")
Set cmdRemove = New_ServerLinkButton("cmdRemove")
Set chkHideShow = New_ServerCheckBox("chkHideShow")
Set chkAutoPostBack = New_ServerCheckBox("chkAutoPostBack")
Set chkListBox= New_ServerCheckBox("chkListBox")
Set cboDropDown = New_ServerDropDown("cboDropDown")
End Function
Public Function Page_Controls_Init()
cmdAdd.Text = "Add"
cmdRemove.Text = "Remove"
lblMessage.Control.Style = "border:1px solid blue;
background-color:#EEEEEE;width:100%;font-size:8pt"
lblMessage.Text = "This is an Example"
chkHideShow.Caption = "Hide/Show List"
chkHideShow.AutoPostBack = True
chkAutoPostBack.Caption = "DropDown AutoPostBack"
chkAutoPostBack.AutoPostBack=True
chkListBox.Caption = "Make it a list box"
chkListBox.AutoPostBack = True
cboDropDown.DataTextField = "TerritoryDescription"
cboDropDown.DataValueField = "TerritoryID"
Set cboDropDown.DataSource = GetRecordset(
"SELECT TerritoryID,TerritoryDescription FROM Territories ORDER BY 2")
cboDropDown.DataBind() 'Loads the items collection
'(that will stay in the viewstate)...
Set cboDropDown.DataSource = Nothing 'Clear
cboDropDown.Caption = "Territory:"
cboDropDown.CaptionCssClass = "InputCaption"
End Function
Public Function Page_PreRender()
Dim x,mx
Dim msg
Set msg = New StringBuilder
msg.Append "<B>Selected Value=</B>"
& cboDropDown.Items.GetSelectedText & "<BR>"
msg.Append "<B>Selected Text=</B>"
& cboDropDown.Items.GetSelectedValue & "<BR>"
msg.Append "<HR>"
mx = cboDropDown.Items.Count -1
lblMessage.Text = msg.ToString()
End Function
'-- PostBack Handlers
Public Function chkHideShow_Click()
cboDropDown.Control.Visible = Not cboDropDown.Control.Visible
End Function
Public Function chkAutoPostBack_Click()
cboDropDown.AutoPostBack = chkAutoPostBack.Checked
End Function
Public Function cmdAdd_OnClick()
cboDropDown.Items.Add cboDropDown.Items.Count,
cboDropDown.Items.Count,False
End Function
Public Function cmdRemove_OnClick()
cboDropDown.Items.Remove cboDropDown.Items.Count-1
End Function
Public Function chkListBox_Click()
if chkListBox.Checked Then
cboDropDown.Rows = 10
cboDropDown.Multiple = True
Else
cboDropDown.Rows = 1
cboDropDown.Multiple = False
End If
End Function
%>
关注点
- 您可以访问 GotDotNet 以获取最新新闻、控件和最新版本。
- 要查看 CLASP 的实际运行效果,请访问 http://clasp.csharpjunkie.com/help/help.htm。
历史
- 当前版本是 2.0(生产稳定版)