ASP常见问题及解答(5)
发表于:2007-06-30来源:作者:点击数:
标签:
1.‘’功能: 过虑HTML字符 ‘’输入:字符串 ‘’输出:经格式化后的字符串 function HTMLEncode(fString) if not isnull(fString) then fString = replace(fString, , gt;) fString = replace(fString, , lt;) fString = Replace(fString, CHR(32)CHR(32), n
1.‘’功能: 过虑HTML字符
‘’输入:字符串
‘’输出:经格式化后的字符串
function HTMLEncode(fString)
if not isnull(fString) then
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "<")
fString = Replace(fString, CHR(32)&CHR(32), " ")
fString = Replace(fString, CHR(9), " ")
fString = Replace(fString, CHR(34), """)
fString = Replace(fString, CHR(39), "'")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ")
fString = Replace(fString, CHR(10), "<BR> ")
HTMLEncode = fString
end if
end function
2.分页类
‘’参数:系统(如:product,article),条件(如果是数值,则默认为categoryID的值),排序,
‘’每页显示记录数,模式(more:显示更多字样,page:显示翻页导航),
‘’翻页导航模式(number:显示数字,page:显示上一页,下一页),记录显示模版名(显示记录的过程名)
class List
dim p_system ‘’系统表,如tblProduct,tblArticle
dim p_where ‘’条件
dim p_orderBy ‘’排序
dim p_recordCount ‘’每页显示记录数
dim p_horizontal ‘’每行显示记录数
dim p_mode ‘’列表模式,参数:more(更多模式,显示更多字样),page(列表模式,显示翻页导航)
dim p_moreURL ‘’更多模式时的URL
dim p_paginationMode ‘’翻页导航模式,参数:number(数字导航,显示如:1,2,3,4),page(翻页导航,显示如:上一页,下一页)
dim p_models ‘’列表模版过程
dim p_table ‘’列表的table标签
dim p_page ‘’页码
dim p_member ‘’是否显示会员产品
dim p_groupWhere
Private Sub Class_Initialize
p_system=""
p_where=""
p_orderBy=" order by categoryID,orderBy,pos
tdate"
p_recordCount=15
p_horizontal=4
p_mode=""
p_moreURL=""
p_paginationMode="page"
p_models=""
p_table="<table width=100% border=0 align=center cellpadding=0 cellspacing=0 bordercolor=#
CCCCCC style=‘’border-collapse: collapse‘’>"
p_page=1
p_member=false
p_groupWhere="groupID=0"
End Sub
Property Let system(value)
p_system=value
end property
Property Let where(value)
if isInt(value) then
p_where=" where categoryID="&value
else
p_where=" where ("&value&")"
end if
end property
Property Let orderBy(value)
p_orderBy=" order by "&value
end property
Property Let recordCount(value)
p_recordCount=value
end property
Property Let horizontal(value)
p_horizontal=value
end property
Property Let mode(value)
p_mode=value
end property
Property Let moreURL(value)
p_moreURL=value
end property
Property Let paginationMode(value)
p_paginationMode=value
end property
Property Let models(value)
p_models=value
end property
Property Let table(value)
p_table=value
end property
Property Let page(value)
if getNumeric(value)<1 then
p_page=1
else
p_page=int(value)
end if
end property
Property Let member(value)
p_member=value
if p_member then
authorizationID=getValue("tblMember","authorizationID","memberID="&session("memberID"))
if authorizationID="" or authorizationID=0 then
authorizationID=getValue("tblGroup","authorizationID","groupID="&session("groupID"))
end if
virtual=getValue("tblAuthorization","virtual","authorizationID="&authorizationID)
authArr=split(virtual,",")
for i=0 to ubound(authArr)
if i=0 then
p_groupWhere="groupID="&getValue("tblGroup","groupID","authorizationID="&authArr(i))
else
p_groupWhere=p_groupWhere&" or groupID="&getValue("tblGroup","groupID","authorizationID="&authArr(i))
end if
next
else
p_groupWhere="groupID=0"
end if
end property
‘’列表过程
public sub List()
dim rs
dim where
if p_where="" then
where=" where "&p_groupWhere&" and publish=1"
else
where=p_where&" and ("&p_groupWhere&") and publish=1"
end if
strSql="select * from "&p_system&where&p_orderBy
‘’response.write strSql
‘’response.end
set rs=getRecord(strSql)
if rs.eof then
response.write convertEncode(lgeNoRecord,gb,language)
exit sub
end if
rs.pageSize=p_recordCount
if rs.pagecount<p_page then p_page=rs.pagecount
rs.AbsolutePage=p_page
dim ii
response.write p_table
for i=1 to p_recordCount
if rs.eof then
exit for
end if
response.write "<tr>"
for ih=0 to p_horizontal
if ii=p_recordCount then
exit for
end if
if rs.eof then
response.write "<td width=" & 1/(p_horizontal+1)*100 & "% > </td>"
else
response.write "<td width=" & 1/(p_horizontal+1)*100 & "% >"
execute "call " & p_models
response.write "</td>"
rs.movenext
end if
ii=ii+1
next
response.write "</tr>"
next
response.write "</table>"
if p_mode="more" then
response.write "<div align=right>"&p_moreURL&"</div>"
end if
if p_mode="page" then
response.write "<table width=100% border=0 cellspacing=0 cellpadding=3><tr><td align=right>"
call pagination(p_page,rs.recordCount,rs.pageCount,p_paginationMode)
response.write "</td></tr></table>"
end if
end sub
end class
‘’-------------------------------列表过程结束-------------------------------------------------------------
3.如何在客户端无刷新调用服务端代码
1.<iframe src="ifm.asp?param=??"></iframe>
2.xmlhttp:
dim objXMLHTTP
set objXMLHTTP=CreateObject("
MICROSOFT.XMLHTTP")
objXMLHTTP.open "GET","xmlhttp.asp",false
‘’参数1:post,get;参数2:请求的URL, 参数3:同步或异步调用
objXMLHTTP.send ""
magbox objXMLHTTP.ResponseText ‘’服务端输出到客户端的文本数据
------------
xmlhttp:参考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmobjxmlhttprequest.asp
4.<%
‘’取得地址栏完整地址
Function GetUrl()
On Error Resume Next
Dim strTemp
If LCase(Request.ServerVariables("HTTPS")) = "off" Then
strTemp = "http://"
Else
strTemp = "https://"
End If
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 Then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
strtemp=left(strtemp,instrRev(strtemp,"/"))
GetUrl = strTemp
End Function
Response.write GetUrl()
%>
5.分页类
<%
‘’===========================================================
‘’分页类,大体思想由.Net的DataGrid的使用方式而来
‘’功能:自动生成datagrid列表头和内容,以及分页栏
‘’根据网友bubuy (澎湃 NoMoneyToBuy)得分页函数修改成类
‘’使用示例:
‘’dim DG
‘’dim Url
‘’dim Fld(2)
‘’dim FldName(2)
‘’dim FldWidth(2)
‘’Fld(0) = "ID"
‘’Fld(1) = "Title"
‘’Fld(2) = "Input_Date"
‘’FldName(0) = "编号"
‘’FldName(1) = "标题"
‘’FldName(2) = "录入日期"
‘’FldWidth(0) = "10%"
‘’FldWidth(1) = "60%"
‘’FldWidth(2) = "30%"
‘’set DG = new DataGrid
‘’DG.DataSource = rs_Grid
‘’DG.titleColor = "#DCE19D"
‘’DG.PageSize = 1
‘’DG.Fields = Fld
‘’DG.FieldsName = FldName
‘’DG.fieldWidth = FldWidth
‘’Url = request.ServerVariables("URL") & "?Param=testParameter" ‘’存在原有参数的情况
‘’DG.Url = Url
‘’DG.Generate()
‘’=============Designed By windancer 2003.10.17===============
Class DataGrid
Private obj_RecordSet ‘’ recordset
Private int_PageSize ‘’ 每页纪录数
‘’两个数组保存
数据库字段名和中文名称
Private Arr_Field ‘’ 数据库字段
Private Arr_FieldName ‘’ 字段显示名称()
Private Arr_FieldWidth ‘’ 字段显示宽度
Private str_TitleColor ‘’ 表头颜色#efffce
Private str_Url ‘’请求的URL
Private str_Error ‘’ 出错信息
Private Sub Class_Initialize()
int_PageSize = 10
str_TitleColor = "#ffffff"
str_Error = ""
End Sub
‘’===============================================================
‘’属性信息
‘’================================================================
‘’-----------------------------------
‘’数据源,暂时只支持RecordSet
‘’-----------------------------------
Public Property Let dataSource(obj)
set obj_RecordSet = obj
End Property
Public Property Let pageSize(intValue)
int_PageSize = intValue
End Property
Public Property Get pageSize
PageSize= int_Categoryid
End Property
Public Property Let Fields(Arr)
Arr_Field = Arr
End Property
Public Property Get Fields
Fields= Arr_Field
End Property
Public Property Let fieldsName(Arr)
Arr_FieldName = Arr
End Property
Public Property Get fieldsName
fieldsName= Arr_FieldName
End Property
Public Property Let fieldWidth(Arr)
Arr_FieldWidth = Arr
End Property
Public Property Get fieldWidth
fieldWidth= Arr_FieldWidth
End Property
Public Property Let titleColor(strValue)
str_TitleColor = strValue
End Property
Public Property Get titleColor
titleColor= str_TitleColor
End Property
‘’-----------------------------------------------------
‘’这个属性是为了保存Url路径
‘’如果当前路径带有参数,那么就用&Page=x,否则就用?Page=x
‘’------------------------------------------------------
Public Property Let Url(StrValue)
str_Url = StrValue
End Property
Public Property Get Url
Url= str_Url
End Property
‘’================================================================
‘’方法
‘’================================================================
‘’----------------------------------------------------------------
‘’显示当前错误
‘’----------------------------------------------------------------
Private Sub ShowLastError()
response.Write(str_Error)
response.End()
End Sub
‘’----------------------------------------------------------------
‘’Generate()
‘’利用ado分页
‘’-----------------------------------------------------------------
Public Sub Generate()
‘’----检查参数--------------------------
Check
‘’---------变量声明-----------------------------------
Dim FieldCount ‘’显示字段
FieldCount = Ubound(Arr_Field) + 1
Dim CurrentPage ‘’当前页
Dim PgCount ‘’总页数
Dim RecCount ‘’记录数,本来用rs.recordCount可以取到,保存下来效率会比较高
Dim HasOtherParam ‘’URL是否包含其他参数
Dim PageParam ‘’当前分页Url参数
Dim PageInfomation ‘’当前分页状态信息
Dim Seperator ‘’设置分隔符
Seperator = " "
‘’-------------处理Url参数---------------------------
if instr(str_Url,"?")>0 then
HasOtherParam = true
PageParam = "&Page="
else
HasOtherParam = false
PageParam = "?Page="
end if
‘’----------获取当前页--------------------------------
CurrentPage = request.QueryString("Page")
if CurrentPage="" then
CurrentPage=1
else
CurrentPage=Cint(CurrentPage)
end if
‘’-----------处理数据源------------------------------
obj_RecordSet.PageSize = int_PageSize
RecCount = obj_RecordSet.RecordCount
PgCount = obj_RecordSet.PageCount
IF obj_RecordSet.Eof Then
Response.Write("<center><font stlye=‘’font-size:14px;‘’ color=‘’#ff0000‘’>对不起,没有记录!</font></center>")
Else
‘’-----------处理ADO分页----------------------------
IF CurrentPage < 1 Then
CurrentPage = 1
Else
If CurrentPage>PgCount Then
CurrentPage = PgCount
End If
End IF
obj_RecordSet.absolutepage = CurrentPage
Response.Write("<table width=100% border=‘’0‘’ cellpadding=‘’0‘’ cellspacing=‘’0‘’ style=‘’font-size:12px;‘’>")
‘’---------------翻页链接-----------------------------
Dim FirstLink,PrevLink,NextLink,LastLink ‘’定义向上和向下翻的变量
‘’-----------------------首页-------------------------
if CurrentPage>1 then
FirstLink = "<a href=‘’" & URL & PageParam & "1‘’>首页</a>"
PrevLink = "<a href=‘’" & URL & PageParam & Cstr(CurrentPage-1) & "‘’>上一页</a>"
else
FirstLink = "首页"
PrevLink = "上一页"
end if
‘’------------下一页----------------
if CurrentPage<PgCount then
NextLink = "<a href=‘’" & URL & PageParam & Cstr(CurrentPage+1) & "‘’>下一页</a>"
LastLink = "<a href=‘’" & URL & PageParam & PgCount & "‘’>尾页</a>"
else
NextLink = "下一页"
LastLink = "尾页"
end if
PageInfomation = FirstLink & Seperator & PrevLink & Seperator & NextLink & Seperator & LastLink & Seperator & "每页" & Cstr(int_PageSize) & "条记录" & Seperator & "共" & PgCount & "页" & Seperator & "目前第" & CurrentPage & "页" & Seperator
Response.Write("<tr><td align=center>")
Response.Write("<table width=‘’100%‘’ border=‘’1‘’ cellpadding=‘’2‘’ cellspacing=‘’2‘’ bordercolor=‘’#999999‘’>")
‘’---------------设置表头-----------------
Response.Write("<tr bgcolor=‘’" & str_TitleColor & "‘’>")
Dim i
For i=0 to FieldCount -1
Response.Write("<td align=‘’center‘’ width=‘’" & Arr_FieldWidth(i) & "‘’><font style=‘’font-size:14px;‘’><b>" & Arr_FieldName(i) & "</b></font></td>")
Next
Response.Write("</tr>")
‘’---------------------输出内容---------------------------------
i=0
While (not obj_RecordSet.EOF) and i<int_PageSize
Dim Cursor
Response.Write("<tr>")
For Cursor = 0 to FieldCount -1
Response.Write("<td align=‘’center‘’>" & obj_RecordSet(Arr_Field(Cursor)) & "</td>")
Next
Response.Write("</tr>")
i=i+1
obj_RecordSet.MoveNext
Wend
‘’------------------------输出分页条------------------------------------
Response.Write("<tr><td align=‘’right‘’ colspan=‘’" & Cstr(FieldCount) & "‘’>" & PageInfomation & "</td></tr>")
response.Write("</table></td></tr></table>")
End IF
End Sub
‘’----------检查参数是否正确---------------
Private Sub Check()
if Ubound(Arr_Field)<>Ubound(Arr_FieldName) then
str_Error="Fields数组和FieldName数组维数必须相同"
end if
if obj_RecordSet=empty then
str_Error="数据源不能为空,请设置dataSource属性"
end if
if int_PageSize="" then
str_Error="数据源不能为空"
end if
ShowLastError
End Sub
End Class
%>
原文转自:http://www.ltesting.net