在WEB环境中页面之间的数据传递可以通过传统的URL参数传递和会话级传递以及通过ASP.NET服务器控件传递页面值。
1使用Querystring Querystring是一种非常简单的传递参数的方式,其缺点就是会把要传送的值显示在浏览器的地址栏中(不安全),同时在使用querystring传值得时候不能传递对象,参数的长度不能大于1024字节,当参数中有中文得时候,通常需要使用HttpUlitity.UrlEncode方法来对参数进行编码和解吗。当然如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成参数传递过程 a.aspx的C#代码 private void Button1_Click(ob { string s_url; s_url = "b.aspx?name=" + Label1.Text; Response.Redirect(s_url); } b.aspx中C#代码 private void Page_Load(ob { Label2.Text = Request.QueryString["name"]; } 2.使用Application传递参数 使用Application变量传递参数是一种最常见的方法,Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。但是缺点在于使用Application得使用一般是相对于整个项目来说相对静止的变量,比如数据库连接变量等。对于那些针对每一个用户,每一个会话未必一样得变量就不适用了。通常Application变量得值是在Config终指定。也可以在global.ascx中指定。例如: a.aspx的C#代码 private void Button1_Click(ob { Application["name"] = Label1.Text; Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(ob { string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); } 3使用Session变量 使用Session变量传值是一种最常见的方式了,优点此种方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。但是使用Session变量往往会占用服务器端的内存使用,所以再网页流量很大的时候,Session便不能很好的完成传值得任务,由于session有一个timeout,所以在使用的时候对用户得操作也有一定的影响。例如: 创建一个web form 在新建的web form中放置一个button1,在放置两个TextBox1TextBox2 为button按钮创建click事件代码如下: private void Button1_Click(ob { Session["name"]=TextBox1.Text; Session["email"]=TextBox2.Text; Response.Redirect("webform2.aspx"); } 新建一个目标页面命名为webform2在webform2中放置两个Label1Label2在webform2的Page_Load中添加如下代码: private void Page_Load(ob { Label1.Text=Session["name"].ToString(); Label2.Text=Session["email"].ToString(); Session.Remove("name"); Session.Remove("email"); } 运行即可看到传递后的结果了。 4使用cookie方法传递参数 这个也是大家常使用的方法,cookie是浏览器端的文本文件,通过对它的读、写,可以很方便的实现页面间的与Session一样,其是针对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。cookie是浏览器端的文本文件,通过对它的读、写,可以很方便的实现页面间的参数传递,而且作为保存时间,也就是数据得有效期来说,确是保存得最好的。但是其缺点是安全性较差,大小受限,不能保存对象。例如: a.aspx的C#代码 private void Button1_Click(ob { HttpCookie cookie_name = new HttpCookie("name"); cookie_name.Value = Label1.Text; Reponse.AppendCookie(cookie_name); Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(ob { string name; name = Request.Cookie["name"].Value.ToString(); } 5 使用Server.Transfer方法 这个可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。它在服务器端直接重定向效率高。而且它可以传递上一个页面的提交值。比如:A页面提交值到B页面,B页面Transfer到C页面,C页面同样可以收到A页面提交的值。但是它的缺点在于不能刷新页面,比如:A页面提交登录信息到B页面,B页面处理后Transfer再到A,A页面得不到刷新,指定了过期也不行。如果A、B页面不在同一个目录下,我们还会发现更多意想不到的结果,使用相对链接的图片、超链接的指向都改变了,造成这种原因是B页面读取A页面内容却以B页面的身份输出,所以路径改变了。例如: a.aspx的C#代码 public string Name { get{ return Label1.Text;} } private void Button1_Click(ob { Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(ob { a newWeb; //实例a窗体 newWeb = (source)Context.Handler; string name; name = newWeb.Name; } 以上五种在Web页面之间传递值的方法它们各有其优缺点我们通过他们的优缺点比较发现它们各自的特点。因而使用它们时要根据具体的实际情况选择使用那一种方法不可一概而论。 |
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛