APP下载

ASP.NET页面跳转和参数传递

2015-02-10周广清刘建平

医疗卫生装备 2015年3期
关键词:字符串控件浏览器

周广清,刘建平

ASP.NET页面跳转和参数传递

周广清,刘建平

目的:探讨ASP.NET页面跳转和参数传递的方法及特点。方法:依靠Microsoft Visual Studio开发平台,以具体实例演示页面跳转和参数传递,并对其进行分析。结果:机制不同的页面跳转和参数传递,其外观效果不同,对系统的影响也不同。结论:页面跳转和参数传递方案的选择对网站或Web应用程序的安全性、稳定性、速度有重大影响,应根据自身需要选择合适的方法。

.NET Framework;ASP.NET;C#;Visual Studio;页面跳转;参数传递

0 引言

ASP.NET[1]是微软.NET Framework[2]类库核心技术之一,广泛应用于网站建设和Web应用程序开发。ASP.NET不但功能丰富,而且大大减少了代码编写工作量,易于掌握,深受IT程序员的欢迎,是微软公司对于世界信息产业的重大贡献。C#[3-4]也称C Sharp,是ASP.NET的一种脚本语言。Microsoft Visual Studio是ASP.NET的调试、编译、部署平台,支持C#、F#、VB。

ASP.NET代码在具有.NET Framework环境的服务器端执行。客户端通过浏览器将请求发送到服务器,服务器执行程序代码并将执行结果发还到客户端,客户端浏览器显示执行结果。从一个网页跳转到另一个网页(也称重定)时,经常需要将源页面的重要信息(参数)传递到目标页面,这就是页面间的参数传递。页面跳转和参数传递是网站或Web应用程序开发的重要组成部分。

1 方法

在下文中,指令的语法是C#。d1是目标页面的名称,p1、p2为参数名称,v1、v2、v3、v4为参数的值,s1、s2为字符串变量。

(1)将传递的参数写入到打开页面的指令中。Response.Redirect"d1.aspx?p1=v1&p2=v2");

或:Response.Write"<script>window.open'd1.aspx?p1=v1&p2=v2','_blank')</script>");

或:Server.Transfer"d1.aspx?p1=v1&p2=v2");

或:Server.Execute"d1.aspx?p1=v1&p2=v2");

或:在导航控件如HyperLink、TreeView等,设置属性NavigateUrl="~/d1.aspx?p1=v1&p2=v2"

或:在浏览器URL输入http://d1.aspx?p1=v1& p2=v2"

以上C#指令的语法是:目标页面文件名和传递的参数之间以?隔开;参数与参数之间以&隔开,等号左边是参数名称,右边是参数的值,类型是字符串,可以传递多个参数。

浏览器URL、导航控件、Response.Redirect()、Response.Write()页面跳转或重定向发生在客户端浏览器,传递的参数在URL是可见的,能被修改甚至被SQL注入[5],会带来潜在的安全风险;Server.Transfer()、Server.Execute()[6]页面跳转或重定向发生在Web服务器,传递的参数在URL是隐藏的,而且也能减少客户端和服务器之间的应答次数,降低网络负载,使程序运行更加流畅,但源页面和目标页面必须属于同一个网站或Web应用程序。Server.Transfer()关闭源页面,跳转到目标页面;Server.Execute()不关闭源页面,将目标页面的执行结果返回到源页面。

在目标页面d1.aspx中,用Request.QueryString将参数p1和p2取出:

Request.QueryString["p1"];

Request.QueryString["p2"];

或:Request.QueryString[0];

Request.QueryString[1];

方括号内的数值是参数名称或参数在查询字符串中的索引位置,0表示第1个参数,1表示第2个参数。

(2)Session[7](会话)传递参数。

网站和Web应用程序是由多用户同时从客户端访问或操作的。当用户打开网站或登录Web应用程序时,用户就和Web服务器建立一个会话,直到用户主动退出(关闭网站或应用程序)或在20 min内(Web.Config文件设定)不进行任何操作,此次会话才告结束。Web服务器同时存在多个(大型网站在高峰时段多达千万)会话,为每个会话分配一个SessionID,作为这次会话的唯一标志。当用户向服务器发出请求时,浏览器会将用户的SessionID自动附加在HTTP头信息中;当服务器处理完成后,根据SessionID将结果返回给用户,有了会话及其SessionID机制,Web服务器才能知道是谁提交的请求,将结果返回给谁。会话除了SessionID,还包含很多其他信息,页面间传递的参数就是其一。

页面跳转的方法在上面已经介绍,用会话传递参数时,将页面跳转指令中目标页面后面的查询字符串去掉即可,如:Response.Redirect("d1.aspx");

会话内传递参数只在本次会话有效,其他会话不能读取。在源页面将参数p1和p2的字符串值存入Session:

Session["p1"]=v1;

Session["p2"]=v2;

Session信息一旦定义,随后打开的其他页面都能将Session中存储的参数值读取到字符串变量:

S1=(string)(Session["p1"]);

S2=(string)(Session["p2"]);

或修改在Session中存储的参数值:

Session["p1"]=v3; Session["p2"]=v4;

Session的信息存储在服务器内存中,当Web服务器同时存在大量Session时,Session的信息会消耗掉大量内存,导致网站或Web应用程序运行速度下降甚至瘫痪。因此,在编写ASP.NET网站或程序时,在合适的时机,将无用的Session信息清除。清除p1:Session.Remove("p1"); 清 除 p2:Session.Remove("p2");清除所有:Session.RemoveAll()[8]或Session.Clear()[7];当会话结束时,其Session信息会自动全部清除,释放内存。用户在设定的时间内没有任何操作,Session自动结束,就是为了释放闲置会话占用的资源。

(3)Application[8]传递参数。

Application存储和传递参数类似于Session,不同之处是Session只在本次会话有效,其他会话不能读取,而Application为所有的会话共享,能读取或修改。将参数p1和p2的字符串值存入Application:

Application["p1"]=v1;

Application["p2"]=v2;

Application信息一旦定义,随后打开的其他页面都能将Application中存储的参数值读取到字符串变量:

S1=Application["p1"].ToString();

S2=Application["p2"].ToString();

由于网站存在大量并发用户,为了数据的一致性,最好在修改前锁定,修改后解锁:

Application.Lock();

Application["p1"]=v3;

Application["p2"]=v4;

Application.UnLock();

Application一般用来定义重要公用信息,如数据库连接信息或用户访问计数器等,很少用于一般的参数传递。只要应用程序不停止,Application中的内容就不会消失。

(4)Cookie[9]传递参数。

在客户端C盘操作系统用户文件夹内有一个隐藏的文件夹cookies,其中cookie文件以较小的文本信息存在,它记录了用户访问网站的历史记录、用户首选项甚至用户名和密码,也用于存储页面交换信息。用户在访问网站或使用Web应用程序时,Cookie在客户端和服务器之间传递。Cookie文件通常限制为4 096 B,以节约网络带宽,并且一个客户端最多可使用20个Cookie,如果不指定Cookie的有效期,会话结束时Cookie即被丢弃。通过浏览器的“internet选项”可以清除Cookie,避免敏感数据泄露。Cookie仅能存储String类型的值,在将其他类型存储到Cookie之前,须将它们转换为字符串。不要在Cookie中存放不应由用户掌握的内容,如数据库的用户名和密码,也不要存放能控制网站的内容。每个Cookie必须有一个唯一的名称,以便浏览器识别,名称相同会导致前一个Cookie被覆盖。

在源页面创建Cookie名称为dataSend,有效期1 d。

HttpCookie myCookie=new HttpCookie("data Send");

myCookie.Expires=DateTime.Now.AddDays(1);

设置子键p1和p2的值,并存入到dataSend:

myCookie.Values.Add("p1",v1);

myCookie.Values.Add("p2",v2);

Response.AppendCookie(myCookie);

在随后打开的其他页面将dataSend中存储的键值读取到字符串变量,在读取Cookie之前,应确保该Cookie存在,否则会收到NullReferenceException报错:

if(Request.Cookies["dataSend"]!=null)

{S1=Request.Cookies["dataSend"]["p1"];

S2=Request.Cookies["dataSend"]["p2"];}

(5)获取源页面公共属性[10]。

如果源页面和目标页面位于同一个ASP.NET应用程序中,在源页面将要传递的参数定义为公共属性,目标页面就可以获取此公共属性的值。重要私密信息不要作为公共属性公开,以免被恶意用户获取。

在源页面sp1.aspx将要传递的参数p1、p2定义为公共属性:

public String p1{get{return v1;}}

public String p2{get{return v2;}}

在目标页面d1.aspx首先对源页面进行强类型引用,即可读取源页面的公共属性:

<%@PreviousPageType VirtualPath="~/sp1.aspx" %>

S1=PreviousPage.p1;

S2=PreviousPage.p2;

(6)获取源页面控件的值[10]。

如果源页面和目标页面位于同一个ASP.NET应用程序中,目标页面可以获取源页面控件的值。此方法也不宜传递重要的私密信息。

在源页面将要传递参数p1、p2的值赋予一些控件,例如TextBox1、TextBox2,在目标页面即可获取源页面控件的值:

if(Page.PreviousPage!=null)

{

TextBox SourceTextBox1=(TextBox)Page.PreviousPage.FindControl("TextBox1");

if(SourceTextBox1!=null)

{s1=SourceTextBox1.Text;}

TextBox SourceTextBox2=(TextBox)Page.PreviousPage.FindControl("TextBox2");

if(SourceTextBox2!=null)

{s2=SourceTextBox2.Text;}

}

2 应用

通过ASP.NET技术开发的应用程序是3层结构:数据库服务器、Web服务器、客户端。客户端通过Web服务器与数据库服务器交换数据,不但加强了数据库服务器的安全,而且使应用程序在网络中的部署和更新更加简单,客户端只需通过浏览器网址访问Web服务器,应用程序更新或升级时只需要更新Web服务器和数据库服务器。目前,ASP.NET在医院信息系统研发中得到了大量应用,“军卫一号”医院信息系统的新版电子病历系统(electronic medical record system,EMRS)医护工作站就是通过ASP. NET技术开发的。

我们通过ASP.NET技术开发了在院患者及其住院费用查询软件,其中就使用了Session传递参数。关键步骤如下:

(1)软件运行时打开页面deptTree.aspx,在树状视图TreeView1中显示临床科室及其患者列表。患者列表包含患者姓名、床号、住院号、住院次。当单击某一患者时,在树状视图单击事件的方法中将该患者的住院号、住院次写入Session参数pid、vid,并打开目标页面CRPbill.aspx:

Session["pid"]=TreeView1.SelectedValue.Substring(0,TreeView1.SelectedValue.IndexOf("_"));

Session["vid"]=TreeView1.SelectedValue.Substring(TreeView1.SelectedValue.IndexOf("_")+1);

Response.Write("<script>window.open('CRPbill. aspx','_blank')</script>");

(2)在目标页面CRPbill.aspx中,将患者的住院号和住院次取出并赋值给字符串变量s1、s2:

s1=(string)(Session["pid"]);

s2=((string)(Session["vid"]);

利用s1、s2构造数据库查询SQL命令,查询此患者的住院费用明细,通过报表控件CrystalReport Viewer1显示。

3 结语

上文介绍的是常用的页面跳转和参数传递方法,每一种都有其适用范围和特点。就页面跳转来说,推荐使用Server.Transfer(),它使页面跳转或重定向发生在服务器,减少了客户端和服务器之间的应答次数,降低了网络负载,而且跳转的页面和传递的参数在URL是不可见的,对外隐藏了系统的内部结构,提高了系统的安全性。Cookie文件传递参数虽然增加了少许网络负载,但对于百兆以上的局域网,Cookie负载可以忽略,但需要注意的是:不要用Cookie传递秘密数据。使用Session传递参数时,应及时清除Session信息,释放服务器内存。

.NET Framework是微软公司开发的丰富的类库平台,还有很多页面跳转和参数传递的方法,需要我们在软件开发过程中不断地发现、探讨和总结,以便找到更多、更适合自己的方法。

(►►►►)(◄◄◄◄)

[1]奚江华.圣殿祭司的ASP.NET2.0开发详解——使用C#最佳应用与实践指南[M].2版.北京:电子工业出版社,2008.

[2]王毅.Net.Framework3.5开发技术详解[M].北京:人民邮电出版社,2009.

[3]Sharp J.Visual C#2008从入门到精通[M].周靖,译.北京:清华大学出版社,2009.

[4]MacDonald M.ASP.NET 3.5从入门到精通(C#2008版)[M].施宏斌,马煜,译.2版.北京:清华大学出版社,2010.

[5]祝种谷,张晟.ASP.NET防范SQL注入攻击的研究与实践[J].电脑知识与技术,2010,6(27):7 724-7 725.

[6]邱晓荣.ASP.NET页面间数据传递方法的研究与实现[J].福建电脑,2008(4):155-156.

[7]徐少华,张华伟,李浩.在ASP.NET中实现Web页面值传递方法的比较[J].武汉理工大学学报,2006,28(6):37-40.

[8]陈启祥,左强.ASP.NET页面间传值方法研究[J].计算机工程,2006,32(8):113-114,117.

[9]唐晏.ASP.NET页面之间数据传递的实现[J].计算机应用研究,2006(5):228-229,235.

[10]Onion F.ASP.NET基础教程——C#案例版[M].施诺,译.北京:清华大学出版社,2003.

(收稿:2014-02-28 修回:2014-06-15)

(栏目责任编校:李惠萍 傅 雳)

·医械临床·

ASP.NET page redirecting and parameter transmitting

ZHOU Guang-qing,LIU Jian-ping
(Information Center,the 401st Hospital of the PLA,Qingdao 266071,Shandong Province,China)

ObjectiveTo analyze the natures and methods of ASP.NET page redirecting and parameter transmitting. MethodsWith Microsoft Visual Studio platform,some example was used to demonstrate and analyze page redirecting and parameter transmitting.ResultsPage redirecting and parameter transmitting had different appearances and influences on the system while the mechanism varied.ConclusionThe scheme of page redirecting and parameter transmitting may affect greatly the safety,stability and velocity of the website and web application programs,so has to be chosen properly.[Chinese Medical Equipment Journal,2015,36(3):73-75,102]

.NET Framework;ASP.NET;C#;Visual Studio;page redirecting;parameter transmitting

R318;TP311.52

A

1003-8868(2015)03-0073-04

10.7687/J.ISSN1003-8868.2015.03.073

周广清(1969—),男,副主任,副主任技师,主要从事医院网络信息方面的研究工作,E-mail:zhougq401@sina.com。

266071山东青岛,解放军401医院信息科(周广清,刘建平)

刘建平,E-mail:liujp401@sina.com

猜你喜欢

字符串控件浏览器
基于文本挖掘的语词典研究
基于.net的用户定义验证控件的应用分析
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
关于.net控件数组的探讨
SQL server 2008中的常见的字符串处理函数
倍增法之后缀数组解决重复子串的问题
最简单的排序算法(续)
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
浏览器