ASP.Net页面传值比较

 

作为一个ASP.Net程序员,尤其是搞B/S开发的,对于不同页面之间变量值的传递用的非常广泛,而掌握不同方式之间的区别和特点也就很有必要。本文将针对这一知识点做一个简单的总结。

页面之间传值大致可以分为以下几种:通过Get方式传递,通过Post方式传递,通过Session方式,通过Cookie方式和,通过Application方式,通过Cache方式,通过页面属性方式和通过静态变量的方式。下面将对于以上几种方式作一个对比:

1、Get方式:通过Get方式在页面之间传值用的非常普遍,用法也非常简单,只需将需要传递的参数附在Url后边即可,如:要访问当前页面,http://www.cnblogs.com/xsyblogs/admin/EditPosts.aspx?opt=1,我们可以看到在Url的最后,有一个“opt=1”的字样,这即我们要传递的参数。在当前页面,如果我们要获取这个参数,只需通过Request.Querystring("opt")方法,即可获取到传递的参数值。因为其是将参数附在Url中,所以其安全性也就可想而知了,但是对于像传递要获取的页码,要获取文章的ID这类参数非常有用。Get方式还有一个致命的缺陷就是最长只能传递255个字符,但对于简单、少量的数据还是非常有用。

2、Post方式:用的最多的除了Get也就是Post了,相对于Get而言,Post似乎更安全,它通过将需要提交的数据封装在隐藏域中,虽然稍微懂点开发的朋友都知道Post方式提交也可以通过浏览器的开发工具来查看,但对于我们平时使用来说,已经足够了。如果需要通过Post方式提交数据,必须有name属性,在服务端通过Request.Form("keyword")的方式获取。Post方法适用于大数据,包括文件上传。

对于Get方式和Post方式的区别在这里稍微给出一个对比:见下图。

3、Session方式

Session方式也是很常见的一种保存页面值的方法,它将用户数据存储在服务器端,将一个ID存放在客户端作为与服务端验证的标记。我们可以把用户名放在Session中,这样就能通过判断Session中某个key的值来判断用户是否登录,登录的话用户名又是多少。Asp.Net中可以设置Session的存储方式,位置,SessionId的保存是否依赖于Cookie。Session的存储有三种方式:

Inproc(默认),Session存储在IIS进程中。

StateServer,Session存储在独立的Windows服务进程中(可以不是Web服务器)。

SqlServer,Session存储在SqlServer数据库的表中(SqlServer服务器)。

虽然InProc模式的Session直接存储在Web服务器IIS进程中,速度比较快,但是每次重新启动IIS都会导致Session丢失。利用后两种模式,我们就完全可以把Session从Web服务器中独立出来,从而减轻Web服务器的压力,同时减少Session丢失的概率。

因此,SessionID存储在客户端(可以是Cookie或者URL),其他都存储在服务端(可以是IIS进程、独立的Windows服务进程或者SQL Server数据库中)。

Session原理图如下:

4、Application方式

将数据存储于Application,相当于一个全局变量,整个站点数据共享,在整个应用程序的生命周期内都是有效的,适用于所有页面,所有用户共享的数据。其适用方法类似于Session,也是通过键值对的形式来取值和赋值。

5、Cookie方式

Cookie方式不失为将数据保存在客户端的经典方式。但由于存储在客户端,其安全性低,受客户端设置的限制。下面请看Cookie原理图:

6、Cache方式

Cache在页面传值这里用的不是太普遍,但也有这方面的功能。Cache主要是将用户数据存储在服务器数据缓存中,可以直接存储对象,但是对数据的更新不及时。用法:Cache["username"]="xiaosy";

7、页面属性

这里所说的页面属性是指利用HttpContext获取发请求的页面的信息。我们常说页面类对象,既然通过HttpContext把这个页面类对象都拿到了,又何愁拿不到里面的变量呢?但是通过这种方式有一点要注意,就是强制转换类型一定要正确,不然就啥也拿不到哦。这里举两个例子:

获取控件的值:

 

获取公共变量:

  

另外还可以通过以下这种方式获取值:

8、静态变量方式

静态变量就是申明一个变量,然后赋值,然后在需要用的时候再取这个变量的值。在这里就不举例了。

9、ViewState

ViewState是Asp.Net特有的页面保持机制,用来恢复页面的状态,无状态的Http请求也因为有了ViewState的存在而变得有状态。ViewState主要是将页面各控件及其所存数据序列化存在name为_ViewStated的隐藏域中。主要适用于页面PostBack需要保存的数据,数据太大也会影响页面发送效率。其原理图如下:

 
 
 

ASP.Net页面传值比较的更多相关文章

  1. ASP.NET页面传值不使用QueryString

    ASP.NET页面传值不使用QueryString   Asp.net中的页面传值方法: 1         Url传值 特点:主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址 ...

  2. ASP.NET页面传值与跳转

    asp.net页面传值的五种方法:QueryString,Session,Application,Request.Cookies,Server.Transfer 其中Cookie和Server.Tra ...

  3. ASP.NET页面传值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值. 存储对象传值.ajax.类.model.表单等!下面欧柏泰克和大家一起来看看asp.net页面传值方式一般有哪些?常用的较简单 ...

  4. Asp.net 页面传值的方法

    ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...

  5. ASP.NET页面传值的方法

    ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...

  6. net面试 ASP.NET页面传值的各种方法和分析 (copy)

    Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题 ...

  7. C/S ASP.NET页面传值汇总

    一. QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不 ...

  8. asp.net页面传值方法汇总

    1. Get(即使用QueryString显式传递)     方式:在url后面跟参数.     特点:简单.方便.     缺点:字符串长度最长为255个字符:数据泄漏在url中.     适用数据 ...

  9. ASP.NET页面传值之Server.Transfer 和Response.Direct

    先看实例: B.apsx:         public string TextBox1Text         {             get             {             ...

随机推荐

  1. 【C语言的日常实践(八)】弦

    串数据类型是一个重要的,但C有没有明确的语言字符串数据类型.头文件string.h它包括大多数字符串处理函数. 故,有操作的串.通常包括string.h头文件. 1.字符串的长度:对字符串进行的操作中 ...

  2. openstack 网络简史

    openstack 网络简史 研究openstack有2个月的时间,这段时间从网上获取N多宝贵资料,对我的学习有非常大帮助,在加上我自己的研究,最终对openstack整个网络体系有了个浅显的认识,写 ...

  3. 承诺c指针 (1)指针是地址

    (1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = & ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  5. java json字符串转List、Map等对象

    List<Map<String, Object>> map = g.fromJson(jsonStr, new TypeToken<List<Map<Stri ...

  6. matlab配置Libsvm 防止备忘录

    1 首先我们要下载一个Libsvm 工具箱 其中,这一切都可以被下载到 2 我们解包 我解压在桌面上 住址C:\Users\Administrator\Desktop\libsvm 3打开matlab ...

  7. c++中&amp;和&amp;&amp;有什么差别

    他们不同点在于&&相当一个开关语句,就是说假设&&前面值为false那么他就不继续运行后面的表达式:而&无论前面的值为什么,总是运行其后面的语句. &能 ...

  8. vi使用高级

    下面的命令在vi命令模式被激活 h 光标左移一个字符 l 光标向右移动一个字符 j 光标下移一行 k 移动光标线 一.对整行操作 1.复制光标所在行 yy 2.删除光标所在行 dd 3.选中光标所在行 ...

  9. addEventListener 与attachEvent

    第一:简单的通用方法(IE && FF) window.onload = function(){ var oDiv = document.getElementById("J_ ...

  10. CentOs Linux 文件位置标记

    vsFTP默认位置: 匿名:/var/ftp/ 用户:/home/用户名 配置文件:/etc/vsftpd/ (一般安装软件后都会在/etc/下生成一个软件相关的配置文件夹) 防火墙位置: /etc/ ...