65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (17投票s)

2004 年 8 月 8 日

5分钟阅读

viewsIcon

206857

downloadIcon

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)

  1. 包含 WebControl.asp 页面
  2. 包含页面将使用的任何 WebControl 文件(例如 Server_TextBox.asp)
  3. 包含页面将使用的任何额外文件。
  4. 执行以下 ASP 代码: Page.Execute
  5. 编写您的 HTML。您可以将 HTML 与服务器控件混合(例如 <TD><%txtFirstName%> </TD>)您**必须**使用以下 ASP 代码开始您将呈现 HTML 表单的区域以及呈现 HTML 输入控件的 WebControls:Page.OpenForm 并以 Page.CloseForm 结束。这一点至关重要,这些函数会呈现 HTML 表单并包含 CLASP 使用的所有隐藏字段。
  6. 接下来是您的 Code-Behind 或服务器代码,它可以放在单独的文件中,也可以放在页面底部。
  7. 包含您的 WebControl 变量声明(例如 Dim txtFirstName, txtLastName
  8. 包含您的页面级别变量(例如 Dim mStatus
  9. 添加 Public Function Page_Init() 并在其中初始化所有 WebControls(例如 Set txtFirstName = New_ServerTextBox("txtFirstName"))和模块级别变量(例如 mStatus= 0
  10. 添加您想覆盖的任何其他页面事件,例如 Page_Controls_Init(仅执行一次,非常适合初始化启用了 Viewstate 的控件,此事件中的代码仅在 If Not Page.IsPostBack 时执行),Page_LoadPage_LoadViewState 等。注意:请记住,Viewstate 仅在 Page_LoadViewState 及之后的事件中可用。
  11. 编写您的事件处理程序,例如 cmdSave_OnClicktxtFirstName_OnTextChange
  12. 编写您的支持函数。
  13. 就是这样!您已完成!。

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_ConfigurePage_RenderHeaderPage_RendeFormPage_RenderFooter,并且它将自动处理 Page_AuthenticateRequestPage_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    
%>

关注点

历史

  • 当前版本是 2.0(生产稳定版)
© . All rights reserved.