制作多重网页,除了必须懂得如何传递数据之外,还必须懂得如何切换网页。
在Asp.Net程序中,切换网页的方法有两种:
Response.Redirect(''网页'')
Server.Transfer(''.aspx网页'')
Response.Redirect和Server.Transfer的区别是:
1、对Response.Redirect来说,只要是存在的网页,都可以是被切换的对象。
2、对Server.Transfer来说,去只能切换到同目录或者是子目录的.aspx网页。
3、Response.Redirect切换到另一个网页之后,浏览器的地址将显示新网址,但是Server.Transfer切换到另外一个网页后,浏览器的地址仍然显示旧网址,可见Server.Transfer具有保密功能。
网页间的数据传递指的是切换到新网页时,旧网页传递数据给新网页。
1、网址的编码
利用网址来传递数据,必须注意的是网址的编码,要编码的原因是,有此字符有特殊意义,例如:&,它是参数的分隔符号,解决的方法是必须修改:
调用Server.URLEncode(变量)对要传递的数据加以编码。
2、大量数据的传递
网页间传递大量数据时,Response.Redirect能够传递的数据以2KB为限,如果超过就产生错误。因此,当所要传递的数据超过2KB时,务必要使用Server.Transfer。
Session对象常用属性:
All 返回全部的Session对象变量到一个数组
Count 返回Session对象变量的个数
Item 以索引值或变量名称来返回或设定Session
TimeOut 返回或设定Session对象变量的有效时间,当联机用户超过有效时间没有动作,Session对象便失效,默认值为20分钟。
Session对象常用方法:
Add 新增一个Session对象变量
Clear 清除所有的Session对象变量
Remove 以变量名称来移除变量
RemoveAll 清除所有的Session对象变量
取得Session的值:
Session(''变量名'')=值
Request对象提供了MapPath方法与Path属性。供服务器来了解日前被浏览网页的路径。
使用MapPath方法接收一个字符串类型的参数,并且返回目前所在的实际路径以及与传入字符串的结合。
例如:Request.MapPath(''aa.aspx'')
<script>
function regInput(obj, reg, inputStr)
{
var docSel = document.selection.createRange()
if (docSel.parentElement().tagName != "INPUT") return false
oSel = docSel.duplicate()
oSel.text = ""
var srcRange = obj.createTextRange()
oSel.setEndPoint("StartToStart", srcRange)
var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)
return reg.test(str)
}
</script>
小写英文:<xmp style= "display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^[a-z]*$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^[a-z]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[a-z]*$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled"
><br>
大写英文:<xmp style= "display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^[A-Z]*$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^[A-Z]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[A-Z]*$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled">
<br>
任意数字:<xmp style="display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^[0-9]*$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^[0-9]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[0-9]*$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled"
><br>
限2位小数:<xmp style="display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^/d*/.?/d{0,2}$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^/d*/.?/d{0,2}$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^/d*/.?/d{0,2}$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled"
> 如: 123.12<br>
日 期:<xmp style="display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^/d{1,4}([-//](/d{1,2}([-//](/d{1,2})?)?)?)?$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^/d{1,4}([-//](/d{1,2}([-//](/d{1,2})?)?)?)?$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^/d{1,4}([-//](/d{1,2}([-//](/d{1,2})?)?)?)?$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled"
> 如: 2002-9-29<br>
任意中文:<xmp style="display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^[/u4E00-/u9FA5]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[/u4E00-/u9FA5]*$/, event.dataTransfer.getData('Text'))"
><br>
部分英文:<xmp style="display:inline"> </xmp>
<input onkeypress = "return regInput(this, /^[a-e]*$/, String.fromCharCode(event.keyCode))"
onpaste = "return regInput(this, /^[a-e]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[a-e]*$/, event.dataTransfer.getData('Text'))"
style="ime-mode:Disabled"
> 范围: a,b,c,d,e<br>
部分中文:<xmp style="display:inline"> </xmp>
<script language=javascript>
function checkChinese(oldLength, obj)
{
var oTR = window.document.selection.createRange()
var reg = /[^一二三四五六七八九十]/g
oTR.moveStart("character", -1*(obj.value.length-oldLength))
oTR.text = oTR.text.replace(reg, "")
}
</script>
<input οnkeypress="return false" οnkeydοwn="setTimeout('checkChinese('+this.value.length+','+this.uniqueID+')', 1)"
onpaste = "return regInput(this, /^[一二三四五六七八九十]*$/, window.clipboardData.getData('Text'))"
ondrop = "return regInput(this, /^[一二三四五六七八九十]*$/, event.dataTransfer.getData('Text'))"
> 范围: 一二三四五六七八九十<br>
1.打印某个frame的内容(frameB)
<html>
<frameset rows="20%,*">
<frame SRC="framea.htm" name="FrameA" noresize>
<frame SRC="frameb.htm" name="FrameB" noresize>
<noframes>
<body>
</body>
</noframes>
</frameset>
</html>
frameA中添加
<input type="button" value="Print the other frame" οnclick="parent.frameB.print();">
2.打印某个对象中的内容,如textbox中的内容
frameA:
<html><head>
</head>
<body>
<form name="formB" action="javascript:window.print()">
<input type="text" name="textboxb" size="12" value="Print Me">
</form>
</body></html>
frameB:
<html><head>
<script>
function printotherframe()
{
parent.FrameB.formB.textboxb.focus()
parent.FrameB.formB.submit()
}
</script>
</head><body>
<form name="formA"><input type="button" value="Print the other frame" οnclick="printotherframe()">
</body></html>
3.打印非当前页
技术同上,只是在frame显示中动一点点骗人的手脚
<frameset rows="100%,*">
<frame src="controlpage.html">
<frame src="pagetoprint.html">
</frameset>
<script language="JavaScript"><!--
if (window.print)
document.write('<form><input type="button" value="Print" onClick="parent.frames[1].focus();parent.frames[1].print()"><//form>');
//--></script>
4.统一页眉页脚
<script language="Javascript"><!--
function doprint() {
//save existing user's info
var h = factory.printing.header;
var f = factory.printing.footer;
//hide the button
document.all("printbtn").style.visibility = 'hidden';
//set header and footer to blank
factory.printing.header = "";
factory.printing.footer = "";
//print page without prompt
factory.DoPrint(false);
//restore user's info
factory.printing.header = h;
factory.printing.footer = f;
//show the print button
document.all("printbtn").style.visibility = 'visible';
}
//--></script>
<body>
<br><br><br>
<object id=factory style="display:none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext codebase="ScriptX.cab#Version=5,0,4,185">
</object>
<br><br>
<div id="printbtn"><input name=idPrint type=button value="Print the letter" οnclick="doprint()"></div>
</body>
5.打开新窗口并自动打印
<object id=WBControl width=0 height=0 classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2></object>
<script language=VBScript><!-- //
Sub VBPrint() On Error Resume Next
WBControl.ExecWB 6,1 '7,2在不少文章中都有提到,这里就不多说了。
End Sub
//--></script>
<script language=JavaScript><!-- //
if (window.print) self.print();
else if (navigator.appName.indexOf('Microsoft') !=-1) VBPrint()
setTimeout('self.close()',3000); '看代码相信大家都能明白。如果有不明白的欢迎留言
//--></script>
html中
<form>
<input type="button" value="Print Price List" onClick="window.open('pricelist.html','newwin');">
</form>
在ASP.Net中最为头痛的可能就是打印设置了。
为了这个问题,我都要熬白头了。网上也找了很多代码,但是总是会存在一些问题。根据我自己的实际试验发现不能用,为找不到对象之类的错误提示。
这里给出两种实际可用的方法:
一。通过注册表修改IE打印设置
<HTML>
<HEAD>
<TITLE>New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="YC">
<script language="VBScript">
dim hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="/Software/Microsoft/Internet Explorer/PageSetup" //IE打印设置的注册表地址
function pagesetup_null()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="/header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" //页眉
hkey_key="/footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" //页脚
hkey_key="/margin_left"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" //键值设定--左边边界
hkey_key="/margin_top"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
hkey_key="/margin_right"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
hkey_key="/margin_bottom"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
end function
'//
function pagesetup_default()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="/header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&b页,&p/&P" //页数-
hkey_key="/footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d" //网址,日期等信息
end function
</script>
</HEAD>
<BODY>
<table width="100%" border=2 cellspacing=1 align=center cellpadding=1 id=tb1>
<tr>
<td>
<br>
<br>
<br>
<p align="center">
<input type="button" value="Clean" οnclick="pagesetup_null()"> <input type="button" value="Reset" οnclick="pagesetup_default()"><br>
</p>
</td>
</tr>
</table>
</BODY>
</HTML> <script language=VBScript type=text/javascript> dim hkey_root,hkey_path,hkey_key hkey_root="HKEY_CURRENT_USER" hkey_path="/Software/Microsoft/Internet Explorer/PageSetup" function pagesetup_null() on error resume next Set RegWsh = CreateObject("WScript.Shell") hkey_key="/header" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" hkey_key="/footer" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" hkey_key="/margin_left" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" hkey_key="/margin_top" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" hkey_key="/margin_right" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" hkey_key="/margin_bottom" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" window.alert(hkey_root+hkey_path) end function '// function pagesetup_default() on error resume next Set RegWsh = CreateObject("WScript.Shell") hkey_key="/header" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&bページ,&p/&P" hkey_key="/footer" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d" end function </script>
除了以上键值以外还有
duplex
orientation
paper_size
paper_source
printer
注意:上面对页边距的设置为:1,实际设置值为25.4。
昨天发现这个方法有一个致命的缺点。那就是这个只能在安装有.Net框架的机子上有效。因为它所调用的WScript.Shell是.Net框架的...我还以为解决了这个烦人的打印控制了,昨天在客户端一运行简直让我伤心死。呵呵。。。。
难道还要让对什么是.net都不知道的用户去安装.net的框架么。不现实。
所以只能又回到javascript中来了。
二。javascript
今天发现原来以前有时有效有时无效的原因是出在,<input name="idPrint" type="button" value="打印" οnclick="doprint()">不能放在页面的<form runat="server" id="Form1">之内,客户端的javascript放在runat server怎么行呢。认识到这个问题就好解决了。以下给出原码:
<script language="Javascript"><!--
function doprint() {
//保留客户打印机设置
var h = factory.printing.header;
var f = factory.printing.footer;
var t = factory.printing.topMargin;
var b = factory.printing.bottomMargin;
var l = factory.printing.leftMargin;
var r = factory.printing.rightMargin;
document.all("printbtn").style.visibility = 'hidden';//打印时隐藏打印按钮
//设置页眉页脚上下左右边距
factory.printing.header = "页眉+_+ohiolee的打印世界";
factory.printing.footer = "想设置页脚么,这里哦";
factory.printing.topMargin="6";//存在最小默认值5.02
factory.printing.bottomMargin="6";//存在最小默认值4.13
factory.printing.leftMargin="2";//存在最小默认值5.08
factory.printing.rightMargin="2";//存在最小默认值6.79。。。本人机子上测出来是这样的,不知道普遍是否如此。
// 直接打印
factory.DoPrint(false);//true时弹出打印对话框
//返回到原来的打印设置
factory.printing.header = h;
factory.printing.footer = f;
factory.printing.topMargin=t;
factory.printing.bottomMargin=b;
factory.printing.leftMargin=l;
factory.printing.rightMargin=r;
//显示打印按钮
document.all("printbtn").style.visibility = 'visible';//通过document.all("printbtn").来指定页面中的任何类,并给以进一步属性设置
}
//--></script>
</HEAD>
<body>
<OBJECT id="factory" style="DISPLAY: none" codeBase="ScriptX.cab#Version=5,0,4,185" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
viewastext>
</OBJECT>
<div id="printbtn"><input name="idPrint" type="button" value="打印" οnclick="doprint()"></div>
codeBase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360" 这里需要给出ActiveX ScriptX.cab的地址,你可以下载到自己的网站中并提供出来,也可以引用其他网站的。当用户访问该网页时,将自动判断该浏览器是否已装有,没有的话,弹出下载警告。同意下载之后,就可以了。
注意不要把<div id="printbtn"><input name="idPrint" type="button" value="打印" οnclick="doprint()"></div>放在runat server的form中哦。。。不要再犯像我一样的错误了哦。
Abs(number) 取得数值的绝对值。
Asc(String) 取得字符串表达式的第一个字符ASCII 码。
Atn(number) 取得一个角度的反正切值。
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。
CBool(expression) 转换表达式为Boolean 型态。
CByte(expression) 转换表达式为Byte 型态。
CChar(expression) 转换表达式为字符型态。
CDate(expression) 转换表达式为Date 型态。
CDbl(expression) 转换表达式为Double 型态。
CDec(expression) 转换表达式为Decimal 型态。
CInt(expression) 转换表达式为Integer 型态。
CLng(expression) 转换表达式为Long 型态。
CObj(expression) 转换表达式为Object 型态。
CShort(expression) 转换表达式为Short 型态。
CSng(expression) 转换表达式为Single 型态。
CStr(expression) 转换表达式为String 型态。
Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。
Chr(charcode) 以ASCII 码来取得字符内容。
Close(filenumberlist) 结束使用Open 开启的档案。
Cos(number) 取得一个角度的余弦值。
Ctype(expression, typename) 转换表达式的型态。
DateAdd(dateinterval, number, datetime) 对日期或时间作加减。
DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。
DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。
DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。
DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。
Day(datetime) 依接收的日期参数传回日。
Eof(filenumber) 当抵达一个被开启的档案结尾时会传回True。
Exp(number) 依接收的参数传回e 的次方值。
FileDateTime(pathname) 传回档案建立时的日期、时间。
FileLen(pathname) 传回档案的长度,单位是Byte。
Filter(sourcearray, match[, include[, compare]]) 搜寻字符串数组中的指定字符串,凡是数组元素中含有指定字符串,会将它们结合成新的字符串数组并传回。若是要传回不含指定字符串的数组元素,则include 参数设为False。compare 参数则是设定搜寻时是否区分大小写,此时只要给TextCompare 常数或1 即可。
Fix(number) 去掉参数的小数部分并传回。
Format(expression[, style[, firstdayofweek[, firstweekofyear]]]) 将日期、时间和数值资料转为每个国家都可以接受的格式。
FormatCurrency(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 将数值输出为金额型态。numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatDateTime(date[,namedformat]) 传回格式化的日期或时间数据。
FormatNumber(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回格式化的数值数据。Numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatPercent(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回转换为百分比格式的数值数据。numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
GetAttr(filename) 传回档案或目录的属性值。
Hex(number) 将数值参数转换为16 进制值。
Hour(time) 传回时间的小时字段,型态是Integer。
Iif(expression, truepart, falsepart) 当表达式的传回值为True 时执行truepart 字段的程序,反之则执行falsepart 字段。
InStr([start, ]string1, string2) 搜寻string2 参数设定的字符出现在字符串的第几个字符,start 为由第几个字符开始寻找,string1 为欲搜寻的字符串,string2 为欲搜寻的字符。
Int(number) 传回小于或等于接收参数的最大整数值。
IsArray(varname) 判断一个变量是否为数组型态,若为数组则传回True,反之则为False。
IsDate(expression) 判断表达式内容是否为DateTime 型态,若是则传回True,反之则为False。
IsDbNull(expression) 判断表达式内容是否为Null,若是则传回True,反之则为False。
IsNumeric(expression) 判断表达式内容是否为数值型态,若是则传回True,反之则为False。
Join(sourcearray[, delimiter]) 将字符串数组合并唯一个字符串,delimiter 参数是设定在各个元素间加入新的字符串。
Lcase(string) 将字符串转换为小写字体。
Left(string, length) 由字符串左边开始取得length 参数设定长度的字符。
Len(string) 取得字符串的长度。
Log(number) 取得数值的自然对数。
Ltrim(string) 去掉字符串的左边空白部分。
Mid(string, start[, length]) 取出字符串中strat 参数设定的字符后length 长度的字符串,若length 参数没有设定,则取回start 以后全部的字符。
Minute(time) 取得时间内容的分部分,型态为Integer。
MkDir(path) 建立一个新的目录。
Month(date) 取得日期的月部分,型态为Integer。
MonthName(month) 依接收的月份数值取得该月份的完整写法。
Now() 取得目前的日期和时间。
Oct(number) 将数值参数转换为8 进制值。
Replace(expression, find, replace) 将字符串中find 参数指定的字符串转换为replace 参数指定的字符串。
Right(string,length) 由字符串右边开始取得length 参数设定长度的字符。
RmDir(path) 移除一个空的目录。
Rnd() 取得介于0 到1 之间的小数,如果每次都要取得不同的值,使用前需加上Randomize 叙述。
Rtrim(string) 去掉字符串的右边空白部分。
Second(time) 取得时间内容的秒部分,型态为Integer。
Sign(number) 取得数值内容是正数或负数,正数传回1,负数传回-1,0 传回0。
Sin(number) 取得一个角度的正弦值。
Space(number) 取得number 参数设定的空白字符串。
Split(expression[, delimiter]) 以delimiter 参数设定的条件字符串来将字符串分割为字符串数组。
Sqrt(number) 取得一数值得平方根。
Str(number) 将数字转为字符串后传回。
StrReverse(expression) 取得字符串内容反转后的结果。
Tan(number) 取得某个角度的正切值。
TimeOfDay() 取得目前不包含日期的时间。
Timer() 取得由0:00 到目前时间的秒数,型态为Double。
TimeSerial(hour, minute, second) 将接收的参数合并为一个只有时间Date 型态的数据。
TimaValue(time) 取得符合国别设定样式的时间值。
Today() 取得今天不包含时间的日期。
Trim(string) 去掉字符串开头和结尾的空白。
TypeName(varname) 取得变量或对象的型态。
Ubound(arrayname[, dimension]) 取得数组的最终索引值,dimension 参数是指定取得第几维度的最终索引值。
Ucase(string) 将字符串转换为大写。
Val(string) 将代表数字的字符串转换为数值型态,若字符串中含有非数字的内容则会将其去除后,合并为一数字。
Weekday(date) 取的参数中的日期是一个星期的第几天,星期天为1、星期一为2、星期二为3 依此类推。
WeekDayName(number) 依接收的参数取得星期的名称,可接收的参数为1 到7,星期天为1、星期一为2、星期二为3 依此类推。
转载自:http://www.cnblogs.com/thankgoodness/articles/1202578.html