ASP网页设计带数据库的ajax+asp无穷级分类树型布局...
因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。还无法完全实现一些企业级的功能:完全的集群、负载均横。跟人人分享一下本人写的一个树型布局,参考了动力文章的无穷极分类树形布局数据库,看演示吧http://asptree.guaishi.org/aspajax/上面是中心类代码,正文是厥后加的,大概有些写的不太准确复制内容到剪贴板代码:
<%
数据库字段为类属性,增加、删除、修正、操纵反省等函数为类的办法
ClassCls_Leibie
PrivatenClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath界说公有变量(类的属性,即数据库字段对应的变量)
Privaters,sql,ErrorStr
PrivateSubClass_Initialize()
ErrorStr=""初始化毛病信息为空
EndSub
PrivateSubClass_Terminate()烧毁类时封闭数据库毗连
IfIsObject(Conn)Then
Conn.Close
SetConn=Nothing
EndIf
EndSub
*******************设置各个属性******************************************************
PublicPropertyLetClassID(str)猎取种别ID(主键)
nClassID=str
callClassProperty()猎取种别ID时挪用此函数读出类的一切属性
EndProperty
PublicPropertyLetClassName(str)猎取种别称号
sClassName=str
EndProperty
PublicPropertyGetClassName
ClassName=sClassName
EndProperty
PublicPropertyLetParentID(str)猎取种别父ID
nParentID=str
EndProperty
PublicPropertyGetParentID
ParentID=nParentID
EndProperty
PublicPropertyLetParentPath(str)猎取父路径ID
sParentPath=str
EndProperty
PublicPropertyGetParentPath
ParentPath=sParentPath
EndProperty
PublicPropertyLetDepth(str)猎取种别深度
nDepth=str
EndProperty
PublicPropertyGetDepth
Depth=nDepth
EndProperty
PublicPropertyLetRootID(str)猎取种别根ID
nRootID=str
EndProperty
PublicPropertyGetRootID
RootID=nRootID
EndProperty
PublicPropertyLetChild(str)子种别个数
nChild=str
EndProperty
PublicPropertyGetChild
Child=nChild
EndProperty
PublicPropertyLetOrderID(str)排序ID
nOrderID=str
EndProperty
PublicPropertyGetOrderID
OrderID=nOrderID
EndProperty
PublicPropertyLetFilePath(str)种别文件根目次(天生静态文件路径,小站怪杰异事网(www.guaishi.org)用的是天生静态,故设置此字段)
sFilePath=str
EndProperty
PublicPropertyGetFilePath
FilePath=sFilePath
EndProperty
******************************************************************************
PrivateSubClassProperty()读取类的一切属性
sql="select*fromArticleClasswhereClassID="&nClassID
setrs=conn.execute(sql)
ifnotrs.eofthen
sClassName=trim(rs("ClassName"))
nParentID=trim(rs("ParentID"))
sParentPath=trim(rs("ParentPath"))
nDepth=trim(rs("Depth"))
nRootID=trim(rs("RootID"))
nChild=trim(rs("Child"))
nOrderID=trim(rs("OrderID"))
sFilePath=trim(rs("FilePath"))
endif
setrs=nothing
EndSub
PublicFunctionFAddCheck()种别增加反省函数,了局为0暗示经由过程反省,为1暗示有毛病产生,有毛病产生时加入函数,将毛病信息写进毛病变量ErrorStr
dimtemprs
FAddCheck=0
ifsClassName=""then类名为空
FAddCheck=1
ErrorStr="类名不克不及为空!"
exitFunction
else
ifnParentID=""then父id为空
FAddCheck=1
ErrorStr="父id不克不及为空!"
exitFunction
else
ifnParentID0then
settemprs=conn.execute("selectClassIDFromArticleClasswhereClassID="&nParentID)父种别不存在
iftemprs.eofthen
FAddCheck=1
ErrorStr="所属种别不存在或已被删除!"
exitFunction
else
sql="selectClassIDfromArticleClasswhereClassName="&sClassName&"andParentID="&nParentID类名反复
setrs=conn.execute(sql)
ifnotrs.eofthen
FAddCheck=1
ErrorStr="类名反复!"
exitFunction
endif
setrs=nothing
endif
settemprs=nothing
else
sql="selectClassIDfromArticleClasswhereClassName="&sClassName&"andParentID="&nParentID类名反复
setrs=conn.execute(sql)
ifnotrs.eofthen
FAddCheck=1
ErrorStr="类名反复!"
exitFunction
endif
setrs=nothing
endif
endif
endif
EndFunction
PublicSubSAdd()
dimmaxClassID,maxRootID
setrs=conn.execute("selectMax(ClassID)fromArticleClass")查找以后数据库中最年夜的种别id,假如没无数据则设置为0,要拔出的种别id为以后最年夜id加1
maxClassID=rs(0)
ifisnull(maxClassID)then
maxClassID=0
endif
setrs=nothing
nClassID=maxClassID+1
setrs=conn.execute("selectmax(rootid)FromArticleClass")查找以后数据库中最年夜的根id,假如没无数据则设置为0,要拔出的根id为以后最年夜根id加1
maxRootID=rs(0)
ifisnull(maxRootID)then
maxRootID=0
endif
nRootID=maxRootID+1
setrs=conn.execute("selectRootID,Depth,ParentPath,Child,OrderIDFromArticleClasswhereClassID="&nParentID)查找父种别响应信息
ifnotrs.eofthen
nRootID=trim(rs("Rootid"))根id与父种别根id不异
sParentPath=trim(rs("ParentPath"))&","&nParentID
ifcint(trim(nParentID))>0then父id年夜于0则有父种别,故要拔出的种别的深度父种别的深度加1,父id不年夜于0则以后要拔出的种别为根种别,则深度为0
nDepth=cint(trim(rs("Depth")))+1
else
nDepth=0
endif
ifcint(trim(rs("Child")))>0then
dimrsPrevOrderID
失掉与本栏目同级的最初一个栏目标OrderID
setrsPrevOrderID=conn.execute("selectMax(OrderID)FromArticleClasswhereParentID="&ParentID)
prevOrderID=rsPrevOrderID(0)
失掉统一父栏目但比本栏目级数年夜的子栏目标最年夜OrderID,假如比前一个值年夜,则改用这个值。
setrsPrevOrderID=conn.execute("selectMax(OrderID)FromArticleClasswhereParentPathlike"&ParentPath&",%")
if(not(rsPrevOrderID.bofandrsPrevOrderID.eof))then
ifnotIsNull(rsPrevOrderID(0))then
ifrsPrevOrderID(0)>prevOrderIDthen
prevOrderID=rsPrevOrderID(0)
endif
endif
endif
setrsPrevOrderID=nothing
endif
nOrderID=prevOrderID+1
else
nOrderID=0
sParentPath="0"
nDepth=0
endif
setrs=nothing
nChild=0
sql="insertintoArticleClass(ClassID,ClassName,ParentID,ParentPath,Depth,RootID,Child,OrderID,FilePath)values("&nClassID&","&sClassName&","&nParentID&","&sParentPath&","&nDepth&","&nRootID&","&nChild&","&nOrderID&","&sFilePath&")"
conn.execute(sql)
ifParentID>0then
更新其父类的子栏目数
conn.execute("updateArticleClasssetchild=child+1whereClassID="&nParentID)
更新该栏目排序和年夜于本必要和同在天职类下的栏目排序序号
ifprevOrderID""then
conn.execute("updateArticleClasssetOrderID=OrderID+1whererootid="&nRootid&"andOrderID>"&prevOrderID&"andClassID"&nClassID)
endif
endif
EndSub
PublicFunctionFEditCheck()种别修正反省函数,了局为0暗示经由过程反省,为1暗示有毛病产生,有毛病产生时加入函数,将毛病信息写进毛病变量ErrorStr
dimtemprs
FEditCheck=0
ifnClassID=""then种别id为空
FEditCheck=1
ErrorStr="种别id不克不及为空!"
exitFunction
else
ifsClassName=""then类名为空
FEditCheck=1
ErrorStr="类名不克不及为空!"
exitFunction
else
ifnParentID0then
settemprs=conn.execute("selectClassIDFromArticleClasswhereClassID="&nParentID)父种别不存在
iftemprs.eofthen
FAddCheck=1
ErrorStr="所属种别不存在或已被删除!"
exitFunction
else
setrs=conn.execute("selectClassIDfromArticleClasswhereClassName="&sClassName&"andClassID"&nClassID&"andParentID="&nParentID)
ifnotrs.eofthen类名反复
FEditCheck=1
ErrorStr="类名反复!"
exitFunction
endif
setrs=nothing
endif
settemprs=nothing
endif
endif
endif
EndFunction
PublicSubSEdit()种别修正
sql="updateArticleClasssetClassName="&sClassName&",FilePath="&sFilePath&"whereClassID="&nClassID
conn.execute(sql)
EndSub
PublicFunctionFDeleteCheck()种别删除反省函数,了局为0暗示经由过程反省,为1暗示有毛病产生,有毛病产生时加入函数,将毛病信息写进毛病变量ErrorStr
FDeleteCheck=0这里删除没有写级联删除文章部分的代码,删除时应当级联删除
ifnClassID=""then
FDeleteCheck=1
ErrorStr="要删除的种别id不克不及为空!"
exitFunction
else
setrs=conn.execute("selectChildfromArticleClasswhereClassID="&nClassID)
ifrs.bofandrs.eofthen
FDeleteCheck=1
ErrorStr="种别不存在大概已被删除!"
exitFunction
else
iftrim(rs("Child"))>0then
FDeleteCheck=1
ErrorStr="该种别含有子种别,请删除其子种别后再举行删除本种别的操纵!"
exitFunction
endif
endif
endif
EndFunction
PublicSubSDelete()
ifnDepth>0then修正父id孩子数
conn.execute("updateArticleClasssetchild=child-1wherechild>0andClassID="&nParentID)
endif
sql="deletefromArticleClasswhereClassID="&nClassID
conn.execute(sql)
EndSub
PublicFunctionFErrStr()
FErrStr=ErrorStr
EndFunction
EndClass
%>上面是中心js代码复制内容到剪贴板代码:
varxmlHttp;//界说一个全局变量
varcurrentID=1;//设置以后选中ID,假如此ID不存在则会产生js毛病
//种别显现主函数
//cid--子种别地点层id
//id--种别id
//pid--[+]和[-]图标id
//fid--种别图标id
functionDivDisplay(cid,id,pid,fid)
{
if(GetId(cid).style.display==)//子种别不显现时图标显现把持
{
GetId(cid).style.display=none;
GetId(pid).src=images/closed.gif;
GetId(fid).src=images/folder.gif;
}
else//睁开子种别时的操纵
{
GetId(cid).style.display=;
GetId(pid).src=images/opened.gif;
GetId(fid).src=images/folderopen.gif;
if(GetId(cid).innerHTML==||GetId(cid).innerHTML==正在提交数据...)
{
GetId(cid).innerHTML=;
ShowChild(cid,id);//挪用显现子种别函数
}
}
}
//与上一个函数感化不异,只感化在最初一个种别
functionDivDisplay2(cid,id,pid,fid)
{
if(GetId(cid).style.display==)
{
GetId(cid).style.display=none;
GetId(pid).src=images/lastclosed.gif;
GetId(fid).src=images/folder.gif;
}
else
{
GetId(cid).style.display=;
GetId(pid).src=images/lastopen.gif;
GetId(fid).src=images/folderopen.gif;
if(GetId(cid).innerHTML==||GetId(cid).innerHTML==正在提交数据...)
{
GetId(cid).innerHTML=;
ShowChild(cid,id);
}
}
}
//种别增加函数
//id--种别id
functionClassAdd(id){
if(GetId("p"+id).src.indexOf("last")>0){//最初一个种别时的增加操纵
if(!GetId("p"+id).onclick){
GetId("p"+id).onclick=function(){DivDisplay2("c"+id,id,"p"+id,"f"+id);};//为[+]和[-]增加单击事务
GetId("s"+id).ondblclick=function(){DivDisplay2("c"+id,id,"p"+id,"f"+id);};//为显现种别笔墨的span增加双击事务
GetId("p"+id).src=images/lastopen.gif;
}
}
else{
if(!GetId("p"+id).onclick){//不为最初一个种别的增加操纵
GetId("p"+id).onclick=function(){DivDisplay("c"+id,id,"p"+id,"f"+id);};
GetId("s"+id).ondblclick=function(){DivDisplay("c"+id,id,"p"+id,"f"+id);};
GetId("p"+id).src=images/opened.gif;
}
}
GetId("c"+id).style.display=;
ShowChild("c"+id,id);
}
//种别修正函数
functionClassEdit(id,classname){
GetId("s"+id).innerHTML=classname;
}
//有多个子种别的种别的删除函数
functionClassDel(id){
ShowChild("c"+id,id);
CurrentSelect(currentID,id)
BrowseRight(id);
}
//只要一个子种别的种别的删除函数
functionClassDel1(id){
if(GetId("p"+id).src.indexOf("last")>0){//当种别是以后种别的最初一个种别时
GetId("p"+id).style.cursor="cursor";//设置图标的鼠标经由款式
GetId("p"+id).onclick=function(){};//由于只要一个子种别删除后就不再有子种别,故将图标单击事务修正为空函数
GetId("s"+id).ondblclick=function(){};//同上
GetId("p"+id).src=images/lastnochild.gif;//图标设置
}
else{
GetId("p"+id).style.cursor="cursor";//非最初一个种别的删除操纵
GetId("p"+id).onclick=function(){};
GetId("s"+id).ondblclick=function(){};
GetId("p"+id).src=images/nofollow2.gif;//这里的图标设置与后面纷歧样
}
ShowChild("c"+id,id);
CurrentSelect(currentID,id);
BrowseRight(id);
}
//向右侧框架传送参数
functionBrowseRight(id){
CurrentSelect(currentID,id);
top.ContentFrame.location="../ArticleMain.asp?ClassID="+id;
}
//设置种别选中形态的函数
functionCurrentSelect(oldid,newid){
currentID=newid;
document.getElementById("s"+oldid).style.backgroundColor="white";
document.getElementById("s"+currentID).style.backgroundColor="#C0C0E9";
}
//创立XMLHttpRequest工具
functionCreateXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
}
else
{
xmlHttp=newXMLHttpRequest();
}
}
//Ajax处置函数
//id,层id
//rid,数据在表中的id
functionShowChild(cid,id)
{
CreateXMLHttpRequest();
if(xmlHttp)
{
xmlHttp.open(POST,child.asp,true);
xmlHttp.setRequestHeader(Content-Type,application/x-www-form-urlencoded);
varSendData=id=+id;
xmlHttp.send(SendData);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
GetId(cid).innerHTML=xmlHttp.responseText;
}
else
{
GetId(cid).innerHTML=堕落:+xmlHttp.statusText;
}
}
else
{
GetId(cid).innerHTML="正在提交数据...";
}
}
}
else
{
GetId(cid).innerHTML=抱愧,您的扫瞄器不撑持XMLHttpRequest,请利用IE6以上版本!;
}
}
//获得页面临象
//id,层id
functionGetId(id)
{
returndocument.getElementById(id);
}在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 掌握asp的特性而且一定要知道为什么。 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
页:
[1]