技巧
下一節:ASP開發44條技巧集錦之二
1. 幾個常用函數
Round(pi, 2) 四捨五入
FormatNumber(k,4) ' 把 k 格式化為帶四位小數點的數。
eg. 如果k =20000則顯示為20,000.00;如果把formatnumber(k,0)則為20,000
Replace(expression,find,replacewith) '返回一字串,其中指定的子串已被另一個子串替換
Left(String,Length) '返回指定數目的從字串的左邊算起的字串。
Split(expression[, delimiter[, count[, start]]]) '返回基於 0 的一維數組,其中包含指定數目的子字串。
eg. 常用這個 Split(String,[delimiter]) ' 用delimiter(用於標識子字串界限的字元)來劃分字串
Instr(String1,String2) '返回某字串在另一字串中第一次出現的位置
eg1. if instr(addation,"密碼配置表")<>0 then '說明存在
eg2. if instr(str,”AP”) >0 不好區分str = (AP,AP&AC),此時只要變為(’AP’,’AP&AC’),再用instr(str,”’AP’”)
2. 快顯視窗Pick值
function pickupSP(spdisid,pjnum,pdcode)
{
window.opener.<%=theForm%>.RefNum<%=Spid%>.value=spdisid;
window.opener.<%=theForm%>.LineS<%=Spid%>.value=pjnum;
window.opener.<%=theForm%>.kokey<%=Spid%>.value=pdcode;
window.close();
}
3. ASP控製圖片顯示的大小(等比例縮放)
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript">
<!--
var flag=false;
function DrawImage(ImgD){
var image=new Image();
image.src=ImgD.src;
if(image.width>0 && image.height>0){
flag=true;
if(image.width/image.height>= 164/112){
if(image.width>164){
ImgD.width=164;
ImgD.height=(image.height*164)/image.width;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+"x"+image.height;
}
else{
if(image.height>112){
ImgD.height=112;
ImgD.width=(image.width*112)/image.height;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+"x"+image.height;
}
}
}
//-->
</script>
</HEAD>
<BODY>
<a href="http://www.webjx.com/htmldata/2005-10-18/img.jpg" target="_blank"><img src="http://www.webjx.com/htmldata/2005-10-18/img.jpg" border="0" width="164" height="112" ></a>
</BODY>
</HTML>
4. ASP中對資料庫表的操作(INSERT/UPDATE/DELETE),可使用交易處理,並支援多交易處理.
在ASP的資料庫物件連結化物件中,提供了一下屬性:
BeginTrans 事務開始
CommitTrans 事務提交
RollbackTrans 交易回復
<%
On Error Resume Next ’錯誤發生後繼續處理
'Asp中使用事務
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "course_dsn","course_user","course_password"
conn.begintrans '開始事務
sql="delete from user_info"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,3,3
if conn.errors.count>0 then '有錯誤發生
conn.rollbacktrans '復原
set rs=nothing
conn.close
set conn=nothing
response.write "交易失敗,復原至修改前的狀態!"
response.end
else
conn.committrans '提交事務
set rs=nothing
conn.close
set conn=nothing
response.write "交易成功!"
response.end
end if
%>
在ASP中,不提供事務的結束,BeginTrans只作用於自己的域,類似於變數聲明一樣,如果在函數體內BeginTrans,則事物只作用於本函數體,如果BeginTrans在函數體外,處於頁面級,則事務的範圍從BeginTrans開始,到頁面的結束均處於事務的管理狀態下.
5. EasySales資料庫操作
dim objCon,objRst,objsql
dim companyid
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open SYSDNS,SYSNAME,SYSPASSWORD
Set objRst = Server.CreateObject("ADODB.RecordSet")
objsql="select * from PasswordConfig where companyid='"&session("CompanyID")&"'"
objRst.Open objsql,objCon,1,3
6. html格式郵件發送
HTML = "<html>"
HTML = HTML & "<head>"
HTML = HTML & "<title>Sending CDONTS Email Using HTML</title>"
HTML = HTML & "<link href="../cn/new.css" rel="stylesheet" type="text/css">"
HTML = HTML & "</head>"
HTML = HTML & "<body bgcolor=""FFFFFF"">"
HTML = HTML & "<p><font size=7>"
HTML = HTML & "This is a test mail in html<br>"
HTML = HTML & "Mail content here ...</font></p>"
HTML = HTML & "</body>"
HTML = HTML & "</html>"
dim StrRecEmail,StrPosEmail,StrSubject,StrBody
StrRecEmail=request("email")
StrPosEmail="yufh@alleasy.com.cn"
StrSubject="資料下載通知函"
StrBody=HTML
7. input是底線
style="BORDER-RIGHT: #f7f7f7 0px solid; BORDER-TOP: #f7f7f7 0px solid; FONT-SIZE: 9pt; BORDER-LEFT: #f7f7f7 0px solid; WIDTH: 110px; BORDER-BOTTOM: #c0c0c0 1px solid; HEIGHT: 16px; BACKGROUND-COLOR: #f7f7f7"
8. Session & Cookie
寫入一個SESSION:
Session["username"])="aa";
Session("username")="aa"
讀取一個SESSINN:
string username= Session["username"];
dim username=Session("username")
Cookie與此用法大致相同
9. 幾個VB中的常數
下列常數由 Visual Basic for Applications 中的類型庫定義,可用來在代碼中的任何地方代替實際值:
常數 等於 描述
vbCrLf Chr(13) + Chr(10) 斷行符號符與分行符號結合
vbCr Chr(13) 斷行符號符
vbLf Chr(10) 分行符號
vbNewLine Chr(13) + Chr(10) 平台指定的新行字元;適用於當前平台
vbNullChar Chr(0) 值為 0 的字元
vbNullString 值為 0 的字串 用來調用外部過程;與長度為零的字串 ("") 不同
vbObjectError -2147221504 使用者定義的錯誤號碼應當大於該值,例如:
Err.Raise Number = vbObjectError + 1000
vbTab Chr(9) Tab 字。
vbBack Chr(8) 退格字元
10. 按鈕為不可用
<%if rsView.eof and rsView.bof then %> ‘ 這裡有個大問題,下文再說
<input name="submit" type='submit' value='對選定使用者解鎖' disabled>
<%else%>
<input name="submit" type='submit' value='對選定使用者解鎖' >
</td>
<%end if%>
11.
報錯並返回
if rs.bof and rs.eof then ‘
還是有問題
response.write"<SCRIPT language=JavaScript>alert('找不到!');"
response.write"javascript:history.go(-1)</SCRIPT>"
end if
-----------------------------------
這個是跳轉。
<script language="javascript">
alert('<%=intOperationInfo%>');
window.navigate('ChangePwd.asp');
</Script>
12.
從
VBS
到
JS
,混用
<%
dim checkpwdconfig
checkpwdconfig=split(addation,"/")
%>
<script language="javascript">
alert("<%=checkpwdconfig(0)%>")
</script>
13.
快顯視窗
<script language=javascript>
function openaddnew()
{
subWindow=window.open("../Edit/PasswordConfigEdit.asp?method=new",'','scrollbars=yes,left=120,top=60,height=250,width=500,menubar=no,location=no,toolbar=no,resizable=yes','')
subWindow.opener = this;
}
</script>用一個串連調用:
<a href=""#"">請修改密碼 </a>圖片調用:
<img name=submit1 src="../button_new<%=session("languageid")%>.gif" >
14.
分頁
<!--#include file="conn.asp"-->
<%
if request("pageno")<>"" then
pageno=int(request("pageno"))
else
pageno=1
end ifsql="select * from news where [language]='中文' and bigclassname='新聞' order by id desc"
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,1,3
rs.pagesize=20
if rs.eof then
pageno=0
else
rs.absolutepage=pageno
end if
%>
==========================================
共<%=rs.recordcount%>條,<%=pageno%>/<%=int(rs.pagecount)%>頁,每頁<%=rs.pagesize%>條
<a href="manage.asp?pageno=1">首頁</a>
<%if pageno>1 then%>
<a href="manage.asp?pageno=<%=int(pageno)-1%>">上一頁</a>
<%
end if
if int(pageno)<>int(rs.pagecount)then
%>
<a href="manage.asp?pageno=<%=int(pageno+1)%>">下一頁</a>
<%end if%>
<a href="manage.asp?pageno=<%=int(rs.pagecount)%>">尾頁</a>
<%rs.close%>
<%call CloseConn()
%>
15.
資料庫更新 sql="select * from [user] where username='"&request("username")&"'"
rs.Open sql,Conn,1,3
rs("usermail")=Request("usermail")
rs("userhome")=Request("userhome"))
rs.update
rs.close
16.
關閉獨立視窗
<head>
<OBJECT id=closes type="application/x-oleobject" classid="clsid:adb880a6-d8ff- 11cf-9377-00aa003b7a11"><param name="Command" value="Close">
</object>
</head>
<body>
<input type="button" value="點擊我關閉視窗" >
</body>
17.
極細表格
<table border="1" cellpadding="0" cellspacing="0" width="32" height="32" bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr>
<td> </td>
</tr>
</table>
18.
幾個Regex
Require : /.+/,
Email : /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,
Phone : /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
Mobile : /^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,
Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
IdCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/,
Currency : /^\d+(\.\d+)?$/,
Number : /^\d+$/,
Zip : /^[1-9]\d{5}$/,
QQ : /^[1-9]\d{4,8}$/,
Integer : /^[-\+]?\d+$/,
Double : /^[-\+]?\d+(\.\d+)?$/,
English : /^[A-Za-z]+$/,
Chinese : /^[\u0391-\uFFE5]+$/,
UnSafe :/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
19. Left
應用(控制字數)
function title(str)
if len(trim(str))>=28 then
title=left(trim(str),27)&"..."
else
title=trim(str)
end if
end function
20.
判斷瀏覽器
<SCRIPT LANGUAGE="javascript1.2">
<!--//
if (navigator.appName == 'Netscape')
var language = navigator.language;
else
var language = navigator.browserLanguage;
if (language.indexOf('en') > -1) document.location.href = 'en/index.asp';
else if (language.indexOf('zh') > -1) document.location.href = 'cn/index.asp';
else
document.location.href = 'cn/index.asp';
// End -->
</script>