介紹
我們總是會遇到這樣的情況,需要將數值從一個網頁傳遞到另一個網頁。在這篇文章中,向你展示了幾種從一個網頁向另一個網頁傳遞數值的幾種方法。在此例子中,創建的網頁由一個文本控件和幾個按鈕控件組成。在文本框中輸入的數據通過被標識在按鈕控件中的不同方法從一個網頁傳遞到另一個網頁。
Response.Redirect
讓我們首先看一看如何使用Response.Redirect方法傳遞數據。這是它們之中最簡單的方法。在文本框中輸入一些數據,並且當你輸入完成數據後,按下“Respose.Redirect”按鈕。我們會得到一個提示,有時我們想在catch程序中傳遞另一個網頁,意味著捕捉到例外程序並且向另一個網頁傳遞。如果你試圖這樣做,它會給你一個System.Threading例外程序。因為你想遺留下一個線程向另一個網頁傳遞數據,所以這個例外程序就會被拋出。
Response.Redirect("WebForm5.ASPx",false);
這個語句告訴編譯器定位到“WebForm5.aspx”,這裡的“false”意味著在當前網頁不能結束你正在做的事情。應該看一看線程發布命令的System.Threading類。在下面,看一看按鈕事件的C#代碼。“txtName”文本控件的名字,文本框的內的值傳遞到一個叫做“WebForm5.ASPx”的網頁。在“?”之後的“Name”符號只是一個臨時的響應變量,這個變量保持著文本的數值。
private void Button1_Click(object sender, System.EventArgs e)
{
// Value sent using HttpResponse
Response.Redirect("WebForm5.ASPx?Name="+txtName.Text);
}
好的,到這種觀點為止,你使用Response發送了數值。剛剛,在此我收集到了這些數值,所以在“WebForm5.ASPx”page_Load事件中,寫入這些代碼。首先,我們檢查到輸入的值不為null。如果不是這樣,我們只是簡單地在網頁上使用Label控件顯示數值。注意:如果你使用Response.Redirect方法來傳遞這些數值,所有這些數值在浏覽器的URL中都是不可見的。你絕不能使用Response.Redirect來傳遞信用證號碼和機密信息。
if (Request.QueryString["Name"]!= null)
Label3.Text = Request.QueryString["Name"];
CookIEs
接下來使用Cookies。CookIEs在服務器端創建,但是客戶端省略。在此 “CookIEs” 按鈕的click事件中,寫入以下代碼:
HttpCookie cName = new HttpCookIE("Name");
cName.Value = txtName.Text;
Response.CookIEs.Add(cName);
Response.Redirect("WebForm5.ASPx");
首先,創建一個cookie命名為“cName”。既然一個cookie實例可以擁有許多數值,告訴編譯器這個cookIE持有“Name”數值。我們將它賦值給TextBox並且最結後將它加入Response流,再使用Response.Redirect方法傳遞給其它網頁。
讓我們看一看如何得到被另一個網頁傳遞的cookIE數值。
if (Request.CookIEs["Name"] != null )
Label3.Text = Request.CookIEs["Name"].Value;
如你所看到的,象我們以前做一的一樣正是使用同一種方法,剛剛我們在Request.QueryString之內,使用了Request.CookIEs。記注一些浏覽器不接收cookIEs。
//圖片上傳
〈SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT〉
Function GetUpload(FormData)
Dim DataStart,DivStr,DivLen,DataSize,FormFIEldData
'分隔標志串(+CRLF)
DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1)
'分隔標志串長度
DivLen = LenB(DivStr)
PosOpenBoundary = InStrB(FormData,DivStr)
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Set FIElds = CreateObject("Scripting.Dictionary")
While PosOpenBoundary 〉 0 And PosCloseBoundary 〉 0
'name起始位置(name="xxxxx"),加6是因為[name="]長度為6
FIEldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6
FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FIEldNameStart '(")的ASC值=34
FormFieldName = bin2str(MidB(FormData,FieldNameStart,FIEldNameSize))
'filename起始位置(filename="xxxxx")
FIEldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10
If FieldFileNameStart 〈 PosCloseBoundary And FIEldFileNameStart 〉 PosopenBoundary Then
FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FIEldFileNameStart '(")的ASC值=34
FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FIEldFileNameSize))
Else
FormFileName = ""
End If
'Content-Type起始位置(Content-Type: xxxxx)
FIEldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14
If FieldFileCTStart 〈 PosCloseBoundary And FIEldFileCTStart 〉 PosOpenBoundary Then
FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FIEldFileCTStart
FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FIEldFileCTSize))
Else
FormFileCT = ""
End If
'數據起始位置:2個CRLF開始
DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
If FormFileName 〈〉 "" Then
'數據長度,減1是因為數據文件的存取字節數問題(可能是AppendChunk方法的問題):
'由於字節數為奇數的圖象存到數據庫時會去掉最後一個字符導致圖象不能正確顯示,
'字節數為偶數的數據文件就不會出現這個問題,因此必須保持字節數為偶數。
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
FormFIEldData = MidB(FormData,DataStart,DataSize)
Else
'數據長度,減2是因為分隔標志串前有一個CRLF
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
FormFIEldData = bin2str(MidB(FormData,DataStart,DataSize))
End If
'建立一個Dictionary集存儲Form中各個FIEld的相關數據
Set Field = CreateUploadFIEld()
Field.Name = FormFIEldName
FIEld.FilePath = FormFileName
FIEld.FileName = GetFileName(FormFileName)
FIEld.ContentType = FormFileCT
Field.Length = LenB(FormFIEldData)
Field.Value = FormFIEldData
Fields.Add FormFieldName, FIEld
PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Wend
Set GetUpload = FIElds
End Function
'把二進制字符串轉換成普通字符串函數
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag
'中文字符Skip標志
skipflag=0
ccc = ""
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow = MidB(binstr,i,1)
'判斷是否中文的字符
If AscB(clow) 〉 127 Then
'AscW會把二進制的中文雙字節字符高位和低位反轉,所以要先把中文的高低位反轉
ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str = ccc
End Function
'把普通字符串轉成二進制字符串函數
Function str2bin(varstr)
str2bin=""
For i=1 To Len(varstr)
varchar=mid(varstr,i,1)
varasc = Asc(varchar)
' asc對中文字符求出來的值可能為負數,
' 加上65536就可求出它的無符號數值
' -1在機器內是用補碼表示的0xffff,
' 其無符號值為65535,65535=-1+65536
' 其他負數依次類推。
If varasc〈0 Then
varasc = varasc + 65535
End If
'對中文的處理:把雙字節低位和高位分開
If varasc〉255 Then
varlow = Left(Hex(Asc(varchar)),2)
varhigh = right(Hex(Asc(varchar)),2)
str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
End Function
'取得文件名(去掉Path)
Function GetFileName(FullPath)
If FullPath 〈〉 "" Then
FullPath = StrReverse(FullPath)
FullPath = Left(FullPath, InStr(1, FullPath, "\") - 1)
GetFileName = StrReverse(FullPath)
Else
GetFileName = ""
End If
End Function
〈/SCRIPT〉
〈SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT〉
function CreateUploadFIEld(){ return new uf_Init() }
function uf_Init(){
this.Name = null
this.FileName = null
this.FilePath = null
this.ContentType = null
this.Value = null
this.Length = null
}
〈/SCRIPT〉
//新聞添加
〈!--#include file="news_session.ASP"--〉
〈Html〉
〈head〉
〈meta http-equiv="Content-Language" content="zh-cn"〉
〈meta http-equiv="Content-Type" content="text/Html; charset=gb2312"〉
〈style type="text/CSS"〉
.buttonface {
BACKGROUND-COLOR: #0079F2; BORDER-BOTTOM: #333333 1px outset; 、
BORDER-LEFT: #333333 1px outset; BORDER-RIGHT: #ffffff 1px outset; BORDER-TOP: #ffffff 1px outset; COLOR: #ffffff; FONT-SIZE: 9pta { color: #000000; text-decoration: none}
〈/style〉
〈SCRIPT ID=clIEntEventHandlersJS LANGUAGE=Javascript〉
〈!--
function clIEnt_onblur(ii) {
server=eval("form1.server"+ii)
if(server.value==""){
client=eval("form1.clIEnt"+ii)
clientvalue=clIEnt.value+""
varlen=clIEntvalue.length
a=clIEntvalue.lastIndexOf('\')
clientvalue=clIEntvalue.substring(a+1)
//alert(clIEntvalue);
server.value=clIEntvalue
}
}
function form1_onsubmit() {
for(i=1;i〈1;i++){
client=eval("form1.clIEnt"+i)
server=eval("form1.server"+i)
if(clIEnt.value!="" && server.value==""){alert("上傳後的文件名不能空!");server.focus();return false}
}
}
//--〉
〈/SCRIPT〉
〈title〉新聞發布系統〈/title〉
〈/head〉
〈body bgcolor=#EDF0F5 topmargin=10 marginheight=5 leftmargin=4 marginwidth=0〉
〈form method="POST" action="news_input.ASP" name="form1" enctype="multipart/form-data" LANGUAGE=Javascript onsubmit="return form1_onsubmit()"〉
〈div align="left"〉
〈table border="1" width="754" height="404"〉
〈tr align="center"〉
〈td width="754" height="28" colspan="3" 〉〈strong〉新聞發布系統後台管理--新聞添加〈/strong〉〈/td〉
〈/tr〉
〈tr〉
〈td width="121" height="16" align="center" 〉新聞標題〈/td〉
〈td width="617" height="16" colspan="2"〉
〈input type="text" name="news_title" size="87"〉〈/td〉
〈/tr〉
〈tr〉
〈td width="121" height="165" align="center" 〉新聞內容〈/td〉
〈td width="617" height="165" colspan="2"〉〈textarea rows="11" name="news_content" cols="85"〉〈/textarea〉〈/td〉
〈/tr〉
〈tr〉
〈td width="121" height="21" align="center" 〉新聞來源〈/td〉
〈td width="617" height="21" colspan="2"〉
〈input type="text" name="news_src" size="87"〉〈/td〉
〈/tr〉
〈tr〉
〈td width="121" height="20" align="center" 〉圖片上傳〈/td〉
〈td width="617" height="20" colspan="2"〉
〈input type="file" name="clIEnt1" size="20" readonly LANGUAGE=Javascript onblur="return clIEnt_onblur(1)" 〉
〈span 〉〈/span〉 〈INPUT type="hidden" name="server1"〉 〈input type="hidden" value="mysession" name="mysession"〉 〈/td〉
〈/tr〉
〈/table〉
〈/div〉
〈p〉
〈input type="submit" value="遞交" name="B1" class="buttonface"〉 〈input type="reset" value="全部重寫" name="B2" class="buttonface"〉
〈input type="button" value="帳號修改" onclick="location.href='admin/news_chadmin.ASP'" name="B2" class="buttonface"〉
〈input type="button" value="新聞修改" onclick="location.href='news_admin1.ASP'" name="B2" class="buttonface"〉〈/p〉
〈/form〉
〈/body〉
〈/Html〉
'###################
news_input.ASP
〈!--#include file="upload.inc"--〉
〈%
'FIElds("xxx").Name 取得Form中xxx(Form Object)的名字
'FIElds("xxx").FilePath 如果是file Object 取得文件的完整路徑
'FIElds("xxx").FileName 如果是file Object 取得文件名
'FIElds("xxx").ContentType 如果是file Object 取得文件的類型
'FIElds("xxx").Length 取得Form中xxx(Form Object)的數據長度
'FIElds("xxx").Value 取得Form中xxx(Form Object)的數據內容
Dim FormData,FormSize,gnote,bnote,notes,binlen,binstr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
Set FIElds = GetUpload(FormData)
'############判斷輸入錯誤
dim news_title,news_content,news_src,mysession
mysession=FIElds("mysession").value
if len(mysession)=0 then
Response.Write "非法登陸或超時請重新登陸"
Response.End
end if
news_title=FIElds("news_title").value
news_title=replace(news_title,"|","|")
news_content=FIElds("news_content").value
news_src=FIElds("news_src").value
news_src=replace(news_src,"|","|")
if len(news_title)=0 then%〉
〈script〉
alert("出錯!新聞標題不能為空");
history.go(-1);
//window.location="news_add.ASP";
〈/script〉
〈%Response.end
end if
if len(news_content)=0 then%〉
〈script〉
alert("出錯!新聞內容不能為空");
history.go(-1);
〈/script〉
〈%end if
if len(news_src)=0 then%〉
〈script〉
alert("出錯!新聞來源不能為空");
history.go(-1);
〈/script〉
〈%Response.end
end if
dim varchar
varchar=right(FIElds("server1").value,3)
if len(varchar)〈〉0 then
if varchar〈〉"gif" and varchar〈〉"jpg" then
%〉
〈script〉
alert("出錯!不能上傳該圖片類型");
history.go(-1);
〈/script〉
〈% Response.end
else
end if
end if
'###########將圖片寫入文件夾
set file_O=Server.CreateObject("Scripting.FileSystemObject")
'##########當前時間做圖片名
dim newname,mytime,newfile,filename,id,image
endname=right(fIElds("server1").value,4)
mytime=now()
id=Year(mytime)&Month(mytime)&Day(mytime)&Hour(mytime)&Minute(MyTime)&Second(MyTime)
imageid=id&endname
'#############寫入圖片
newfile="clIEnt1"
filename=FIElds("server1").value
If FIElds(newfile).FileName〈〉"" Then
file_name=Server.MapPath("./images/"&imageid&"")
set outstream=file_O.CreateTextFile(file_name,true,false)
binstr=FIElds(newfile).Value
binlen=1
varlen=lenb(binstr)
for i=1 to varlen
clow = MidB(binstr,i,1)
If AscB(clow) = 255 then
outstream.write chr(255)
binlen=binlen+1
if (i mod 2)=0 then
notes=gnote
exit for
end if
elseif AscB(clow) 〉 128 then
clow1=MidB(binstr,i+1,1)
if AscB(clow1) 〈64 or AscB(clow1) =127 or AscB(clow1) = 255 then
binlen=binlen+1
'if (binlen mod 2)=0 then
binlen=binlen+1
outstream.write Chr(AscW(ChrB(128)&clow))
'end if
notes=bnote
exit for
else
outstream.write Chr(AscW(clow1&clow))
binlen=binlen+2
i=i+1
if (i mod 2)=0 then
notes=gnote
exit for
end if
end if
else
outstream.write chr(AscB(clow))
binlen=binlen+1
if (i mod 2)=0 then
notes=gnote
exit for
end if
end if
next
outstream.close
set outstream=file_O.OpenTextFile(file_name,8,false,-1)
outstream.write midb(FIElds(newfile).Value,binlen)
outstream.close
if notes=bnote then notes=notes&(binlen-1)&"字節處。"
End If
把新聞數據結構寫入newslist文件
dim mappath,mytext,myfso,contenttext,news_addtime,news_point
news_point=1
news_addtime=mytime
set myfso=createobject("scripting.filesystemobject")
mappath=server.mappath("./")
set mytext=myfso.opentextfile(mappath&" ew_list.ASP",8,-1)
dim mytext2
if len(varchar)〈〉0 then
mytext2=trim(id&","&news_title&","&id&".txt"&","&news_src&","&news_point&","&news_addtime&","&imageid&"|")
else
mytext2=trim(id&","&news_title&","&id&".txt"&","&news_src&","&news_point&","&news_addtime&"|")
end if
mytext.writeline(mytext2)
mytext.close
'##############把新聞內容寫入相應的文件中
set contenttext=myfso.OpenTextFile(mappath&" ews_content\"&id&".txt",8,-1)
function Htmlencode2(str) '#############字符處理函數
dim result
dim l
l=len(str)
result=""
dim i
for i = 1 to l
select case mid(str,i,1)
case chr(34)
result=result+"''"
case "&"
result=result+"&"
case chr(13)
result=result+"〈br〉"
case " "
result=result+" "
case chr(9)
result=result+" "
case chr(32)
if i+1〈=l and i-1〉0 then
if mid(str,i+1,1)=chr(32) or mid(str,i+1,1)=chr(9) or mid(str,i-1,1)=chr(32) or mid(str,i-1,1)=chr(9) then
result=result+" "
else
result=result+" "
end if
else
result=result+" "
end if
case else
result=result+mid(str,i,1)
end select
next
Htmlencode2=result
end function
contenttext.write Htmlencode2(news_content)
contenttext.close
set myfso=nothing
%〉
〈script〉
alert("發布成功");
window.location="news_add.ASP";
〈/script〉
//新聞列表顯示
〈%
dim myfso,myread
set myfso=createobject("scripting.filesystemobject")
set myread=myfso.opentextfile(server.mappath("./new_list.ASP"),1,0)
if myread.atendofstream then
Response.Write "目前沒有添加新聞"
Response.End
else
dim mytext,listarray
mytext=myread.readall
listarray=split(mytext,"|") '#######把所有記錄分割成一個數組a
dim recordcount,pagecount, pagesize, pagenum
recordcount=ubound(listarray)'############記錄條數
pagesize=2
pagecount=recordcount/pagesize '#######取得頁面數
if instr(1,pagecount,".")=null or instr(1,pagecount,".")=0 then
pagenum=pagecount
else
pagenum=int(pagecount)+1
end if
dim topage
topage=cint(Request.QueryString ("topage")) '########取得要顯示的頁面
if topage〈=0 then
topage=1
end if
if topage〉pagenum then
topage=pagenum
end if
dim i,j,n
b=listarray
for i=0 to recordcount-1 '########把每一條記錄組成一個數組
j=split(listarray(i),",")
if ubound(j)=6 then
b(i)="〈SPAN style='COLOR: #ffbd00; FONT-SIZE: 7px'〉〈li〉〈/SPAN〉〈span style='font-size:10pt'〉〈a href='news_vIEw.ASP?id=" & j(0) & "' target=blank〉" & j(1) & "(圖)〈/a〉 點擊:" & j(4)&"次 最後發布