拯救ASP---Quickwork For Asp MVC 开发框架-留言本实例及下载

来源:互联网 发布:网站商城源码 编辑:程序博客网 时间:2024/04/28 16:26

Quickwork For Asp 1.0简介及下载地址:
http://bbs.blueidea.com/thread-2983400-1-1.html

本实例所需文件打包下载地址:
http://www.anyyy.com/quickwork/notebook.rar

Quickwork QQ交流群:95259394

为讲述方便,在这里假设你已经下载了框架主程序,并将其放在根目录下,并且index.asp为默认文档,如非此环境,请在IIS中设置,最后不要忘记该目录需要有读写修改删除等权限,否则数据库无法正常打开。

该实例RAR文件解压后包含4个文件:
1个mod文件:mod_message.asp,放入框架目录中mods文件夹
2个view模板文件:message.html、message_form.html,放入框架目录中view文件夹
1个ACCESS数据库文件:mydata.mdb

环境、文件目录各就各位以后,还需要config.asp中的数据库路径和表前缀进行设置
const DB_CONN = "access:data/mydata.mdb"
"data/mydata.mdb"为数据库的存放路径,可使用相对或绝对路径,mydatea.mdb放在哪里即设置在哪里,不必多说

const DB_TABLE_PRE = "m_"
"m_"为表前缀,打开mydata.mdb可以看到其中包含一个表m_message,因此这里设置为"m_"。

至此,全部准备就绪。浏览器中输入:http://localhost/?/message/,即可测试

本实例包含了对数据库的常用操作,6个基本范例action:
循环列表分页显示 - function default()
添加数据表单 - function add_form()
添加数据处理 - function add()
修改数据表单 - function up_form()
修改数据处理 - function update()
删除数据 - function del()
由于添加数据表单和修改数据表单基本一致,因此使用了同一个模板文件

mod_message.asp代码(注释比较多~):

复制内容到剪贴板
代码:
<%
'创建一个与表名一致的mod类,message
class message
    '声明一个title属性,供各个action设置网站的title
    public title
    
    '声明数据库类,仅供message内部使用,因此这里用到了private而非public
    private db
    
    '非法操作或成功操作后转向的页面,多次用到,这里将它设置为一个变量,便于维护
    private actionurl
    
    private sub class_initialize()
        '多处action使用到数据库连接,因此在初始化mod时创建一个数据库类,供action调用
        set db = new cls_db
        
        'title默认为“首页”
        title = "首页"
        
        '非法操作或成功操作后转向的页面,这里暂设置为首页
        actionurl = "./?/message/"
        
        '当action为"up_form"和"del"时,需要传递ID参数,为了避免重复验证,在初始化集中验证
        'action_可获取当前action名称,在这里用到了tools中的一个函数arr_in(array,v),判断某数值是否在数组内
        if arr_in(array("up_form","del"),action_) then
            '若id不为数字即转向出错页,这里转入首页
            if not isnum(get_("id")) then call go(actionurl)
        end if
    end sub
    
    private sub class_terminate()
        '在mod运行完后释放数据库类,
        set db = nothing
    end sub
    
'action-首页
    function default()
        '绑定模板文件中的loop循环标签,使用分页模式循环,"[]"代表当前mod名,可映射至相同名的表,即"message"表
        arr = array("id:list","sql:select id,username,content,adddate,ip from [] order by id desc","page")
        
        '若不设置DB_PAGE_SIZE,则使用config.asp中默认分页数量,这里设置为5
        DB_PAGE_SIZE = 5
        default = array("message.html","[loop]",arr)
        
    end function
    
'action-留言表单
    function add_form()
        title = "发表留言"
        add_form = array("message_form.html")
    end function
    
'action-留言处理
    function add()
        '新添加数据和修改数据时均要验证表单项合法性,因此将验证部分代码做成了一个函数
        call checkpost()
        
        '将要添加的文本框名装入数据,数组中第一个值为要插入的表名,同样使用了"[]"代替"message",前提是表名要与该mod名相同,而这里的文本框名也要与字段名称一一对应
        '框架内集成了对一些常用数据的合法性验证,"文本框名|验证类型","username|null",即代表不能username不能为空。"content|html",html类型数据将会对该文本项过滤危险HTML代码,如<script,<iframe,<style等
        '框架内也集中了一些常用字段的自动赋值,如adddate将直接为字段adddate赋值now(),"ip"为客户端IP
        arr = array("[]","username|null","content|html","adddate","ip")
        
        '使用db.add方法插入数据
        if db.add(arr) then call location_alert("留言成功将转入首页",actionurl)
    end function
    
'action-留言修改
    function up_form()
        title = "修改留言"
        
        'db.find(),通过SQL语句将一条满足条件的记录返回至一个一维数组
        arr = db.find("select username,content from [] where id = " & get_("id"))
        
        '若不为数组则表明该留言不存在,转入错误页
        if not isarray(arr) then call go(actionurl)
        
        '替换模板标签,array("模板文件名","标签1","值1","标签2","值2")
        up_form = array("message_form.html","id",get_("id"),"username",arr(0),"content",arr(1))
    end function
    
'action-修改处理
    function update()
        call checkpost()
        
        '对表单中隐藏域id进行合法验证
        if not isnum(f("id")) then call go(actionurl)
        
        'array("表名","主键值","表单项名1|验证类型",,"表单项名2|验证类型")
        'DB类可以自动识别主键名称,因此这里只需要表名、主键值、修改项即可
        arr = array("[]",f("id"),"username|null","content|html")
        
        if db.update(arr) then call location_alert("修改成功",actionurl)
    end function
'action-留言删除
    function del()
        call db.del(get_("id"))
        call location_alert("已删除",actionurl)
    end function
    
'简单验证提示    
    private sub checkpost()
        if isn(f("username")) or isn(f("content")) then call location_back("昵称和留言内容均为必填项,请检查")
    end sub
'由于修改和新建表单所需要填到的项目基本一致,所以这里使用了同一个模板,但他们的提交URL不同,因此form_auto_action做一个自动辨别处理    
    public function form_auto_action()
        dim tmp
        'action_-当前action名
        tmp = iff(action_ = "add_form","add","update")
        
        'let_,用于构造URL,let_("mod名,action名,参数1,值1,参数2,值2"),当mod名和action省略时,即为当前mod名称和当前action名称
        '当然也可以直接写成"index.asp?/message/" & tmp & "/"
        form_auto_action = "index.asp" & let_("," & tmp & "/")
    end function
end class
%>

以上代码和两个模板文件代码均包含在RAR文件中,也有比较详细的注释说明,可对照查看

原则上,一个mod文件对应一个表的操作及显示,mod文件中的每一个function(即action)对应该表的不同操作界面及数据处理。