• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET 页面之间传递值方式优缺点比较

ASP.NET 页面之间传递值方式优缺点比较

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了页面跳转 asp.net,阐述asp.net页面模型,asp.net,asp net培训,asp和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本题考查面试者对ASP.NET中多页面传值的理解是否全面。因为ASP.NET的页面表单提交到自身,完成回传的功能,所以默认情况下不能使用POST方式进行多页面传值。关于这些传值方式的分析如下所示。
1.URL传值
这是经典的传值方式,这种方法的使用非常简单,不过所传递的值是会显示在浏览器的地址栏上的,而且不能传递对象。所以这种方法一般用于传递的值少且安全性要求不高的情况下。在*.aspx页面开发中可以使用超级链接文本进行传值,如以下代码所示。
<asp:HyperLink runat="server" ID="HpLink"
NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL传值</asp:HyperLink>
以上链接文本将页面跳转到GetValues.aspx页面,并且通过URL传递urlvalue1变量和urlvalue2变量,其值分别为intel和amd。在*.cs的服务器端方法中也可以调用HttpResponse对象的Redirect方法,将浏览器端重定向到新页面并通过URL传值,如以下代码所示。
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
2.Session传值
这种方法将每份数据存储于服务器变量中,可以传递比较多的数据,并且安全性较高,所以常用于用户身份的验证功能中。不过,Session变量如果存储过多的数据会消耗过多的服务器资源,编程者在使用时应该慎重,其使用方法如以下代码所示。
Session["SessionValue"] = “ATI”;
//也可以用索引存储
Session[0] = “ATI”;
//在其他页面的服务器端方法中取值方式为:
string str = Session["SessionValue"].ToString();
//也可以用索引获取
string str = Session[0].ToString();
Session的可在应用程序的多个页面中以名称/值对的方式共享,直到浏览用户关闭自己的浏览器或者服务器Session超时(可设置,默认为20分钟)。
3.Cookie传值
Cookie是一种比较特殊的数据存储方式,因为这种方式将数据存储于浏览用户的电脑中,以文本文件的形式存在于磁盘中。这种方式非常有意思,很多登录系统就是利用Cookie实现用户自动登录。即用户登录一次的登录信息将被写入到用户电脑的Cookie文件中,下次登录时,网站自动读取该Cookie完成身份验证。通过Cookie传递数据虽然很方便,保存时间可以自由设置,但是安全性不高,编程者不应过于依赖Cookie,而应采用结合的方式完成敏感数据的存储。
ASP.NET中操作Cookie的主要类型位于System.Web命名空间下,分别为HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作独立Cookie的安全类型,访问HttpResponse和HttpRequest的Cookies属性可以获取HttpCookieCollection集合对象,以读取或添加HttpCookie对象。添加Cookie的方法如以下代码所示。
//创建一个HttpCookie 对象,向构造函数传递名称值
HttpCookie ck = new HttpCookie("CookieValue");
//设置ck的“Value”属性(值)
ck.Value = “Cookie值”;
//设置ck的过期时间为当前时间加上360s,即6分钟后失效
ck.Expires = DateTime.Now.AddSeconds(360);
//设置ck有效范围(域限制)
ck.Domain = "www.google.cn";
//将ck添加至HttpCookieCollection对象
Response.Cookies.Add(ck);
//也可为以下方法添加
//Response.AppendCookie(ck);;
读取用户的Cookie则更为简单,只需根据名称读取HttpCookieCollection集合对象中的子项即可,如以下代码所示。
string str = Request.Cookies["CookieValue"].Value;
除此之外,还可以利用一个HttpCookie存储多个名称/值对形式的Cookie信息,如以下代码所示。
HttpCookie ck = new HttpCookie("CookieValue");
//以名称/值对的方式添加多个Cookie信息
ck.Values.Add("value1", “one”);
ck.Values.Add("value2", "two");
//设置ck的过期时间为当前时间加上100年,即100年后失效
ck.Expires = DateTime.Now.AddYears(100);
//通过以下两种方法添加
Response.Cookies.Add(ck);
//Response.AppendCookie(ck);
读取这些Cookie如以下代码所示。
string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];
str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];
说明:多数浏览器支持最多可达4096字节的Cookie,如果要将为数不多的几个值保存到用户计算机上,浏览器还限制了每个站点可以在用户计算机上保存的Cookie数量。大多数浏览器只允许每个站点保存20个Cookie。如果试图保存更多的Cookie,则最先保存的Cookie就会被删除。还有些浏览器会对来自所有站点的Cookie总数作出限制,这个限制通常为300个。用户可以设置自己的浏览器,拒绝接受Cookie,这种情况下只能结合其他的数据存储方式。
4.Server.Transfer传值
这个方法的步骤相对较多,使用该方法编程者可以在另一个页面以公开对象属性的方式来存取值,使用这种方法是面向对象的。该方法的代码编写并不复杂,首先通过定义一个public权限的属性,该属性可返回所需传递的值。然后在第两个页面中,使用Context.Handler属性来获得前一个页面实例对象的引用,即可通过访问自定义的属性获取需要的值。
假设SendValues.aspx页面为传递数据的页面,在SendValues.aspx.cs的页面类中定义一个public属性,通过get直接返回需要传递的值(可为页面中某个服务器控件的属性值)。
public string TransferData
{
get
{
return "VIA";
}
}
在SendValues.aspx.cs的某个方法(如Button控件的Click事件处理方法)中调用HttpServerUtility对象的Transfer方法,如以下代码所示。
Server.Transfer("~/GetValues.aspx");
假设GetValues.aspx为第二个页面,在GetValues.aspx.cs的Page_Load方法中接收前一个页面所传递的值,方法如以下代码所示。
//定义SendValues类型的变量SV_Page
SendValues SV_Page;
//访问HttpContext对象的Handler属性,将值转换为SendValues类型,引用赋值给SV_Page
SV_Page = (SendValues)Context.Handler;
//SV_Page即为SendValues.aspx页面类的对象,直接获取其TransferData属性值
string str = SV_Page.TransferData;
可见,这种方法对于有面向对象基础的编程者而言非常容易理解。不过页面间如果需要传递数量比较多的值,这种方法需要定义过多的属性,略显繁杂。编程者还可以直接使用HttpContext对象的“Iterms”属性添加多项名称/值对的数据,在SendValues.aspx.cs调用HttpServerUtility对象的Transfer方法的某个方法中,修改代码如下所示。
Context.Items["value1"] = "one";
Context.Items["value2"] = "two";
在GetValues.aspx.cs的Page_Load方法中接收前1个页面所传递的值,修改代码如以下代码所示。
string str = "值1:" + Context.Items["value1"].ToString();
str += "值2:" + Context.Items["value2"].ToString();
5.Application传值
严格地说应该是通过HttpApplication对象在服务器端生成一个状态变量来存储所需的信息,该HttpApplication对象变量的可用范围覆盖整个WEB应用程序。所以该对象一般存储一些要公布的信息,如在线人数等,而对于那些涉及用户个人的敏感数据则不用这种方法存储。HttpApplication对象有两个常用的方法,即Lock和UnLock方法,可用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock方法则解除对HttpApplication对象变量的锁定。通过HttpApplication对象传值的方法和Session比较相似,在页面类的某个方法中编写代码如下所示。
Application["a"] = "微软公司";
Application["b"] = "苹果公司";
Application["c"] =  “Mac”;
以上代码很轻松地将三个字符串值保存在HttpApplication对象的变量中了,并且这些变量是整个程序共享的,其他用户通过相应的页面同样可以获取。获取这些变量的方法如以下代码所示。
Application.Lock();
string str = "值1:" + Application["a"];
str  += "值2:" + Application["b"];
str  += "值3:" + Application["c"];
Application.UnLock();
注意:虽然使用方式和Session相似,但是Session是对于每个单独的用户,当该用户关闭浏览器,则Session失效。HttpApplication对象存储的变量是针对所有访问程序的用户,即使有用户关闭了浏览器,变量的值不会丢失。
6.跨页面传送
跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。
<asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"></asp:TextBox>
<asp:Button runat="server" ID="btn6" Text="跨页面传送方式" PostBackUrl="~/GetValues.aspx" />
以上代码中,TextBox控件的“Text”属性为“Geforce TX280”,这是所需要传送的值。而Button控件的“PostBackUrl”属性指定了GetValues.aspx页面,该页面即可接收所需传递的值。在GetValues.aspx.cs的Page_Load方法中,编写以下代码。
//PreviousPage为向当前页面传输控件的页面
if (PreviousPage != null)
{
//从PreviousPage容器中搜索“ID”为PbValue的控件,并转换为TextBox类型
TextBox tb = (TextBox)Previ
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET使用ajax实现分页局部刷新页面功能
  • ASP.NET实现个人信息注册页面并跳转显示
  • Asp.net中阻止页面按钮多次提交的解决办法
  • 在ASP.NET Core中显示自定义的错误页面
  • ASP.NET实现个人信息注册页面并跳转显示
  • ASP.NET页面缓存常见的4种方式
  • Asp.net页面中调用soapheader进行验证的操作步骤
  • ASP.NET中防止页面刷新造成表单重复提交执行两次操作
  • asp.net采集页面上所有图像图片资源的具体方法
  • 详解ASP.NET页面生命周期

相关文章

  • 2017-05-11.net读取Rss转换为DataTable
  • 2017-05-11关于ASP.NET中TreeView用法的一个小例子
  • 2017-05-11一个简答的Access下的分页asp.net代码
  • 2017-05-11ASP.NET之Excel下载模板、导入、导出操作
  • 2017-05-11ASP.NET MVC3 实现全站重定向的简单方法
  • 2017-05-11ASP.NET实现上传Excel功能
  • 2017-05-11深入解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
  • 2017-05-11.net log4的详细用法
  • 2017-05-11在ASP.NET中实现弹出日历的具体方法
  • 2017-05-11有关.NET参数传递的方式引发的思考

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 上传图片前判断文件格式与大小验证文件是不是图片
    • Asp.net内置对象之Cookies(简介/属性方法/基本操作及实例)
    • ASP.NET编程获取网站根目录方法小结
    • 在dropDownList中实现既能输入一个新值又能实现下拉选的代码
    • asp.net 数据库连接池浅析
    • 利用Asp.Net Core的MiddleWare思想如何处理复杂业务流程详解
    • 在ASP.NET 2.0中操作数据之十五:在GridView的页脚中显示统计信息
    • ASP.NET编程时遇到GridView的一个问题 激发了未处理的事件"PageIndexChanging"
    • 基于ASP.NET+easyUI框架实现图片上传功能(表单)
    • 让你的.NET程序兼容不同版本的Dll文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有