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

一、QueryString

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

这种方法的优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效。

这种方法的缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的。

2.不能传递对象。

使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址。

2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地址中。

3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。

例子:(1)a.aspx

privatevoid Button1_Click(object sender,System.EventArgs e)

{

string s_url;

s_url = "b.aspx?name=" + Label1.Text;

Response.Redirect(s_url);

}

(2)b.aspx

privatevoid Page_Load(object sender, EventArgs e)

{

Label2.Text = Request.QueryString["name"];

}

二、Session

想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。

优点:1.使用简单,不仅能传递简单数据类型,还能传递对象。

2.数据量大小是不限制的。

缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源。

2.容易丢失。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(OrObject)";

2.在目的页面的代码使用Session变量取出传递的值。Result = Session["Nmae"]

注意:session不用时可以销毁它,销毁的方法是:清除一个:Session.Remove("session名");

清除所有:Session.Clear();

例子:(1)a.aspx

privatevoid Button1_Click(object sender,System.EventArgs e)

{

Session["name"] = Label.Text;

}

(2)b.aspx

privatevoid Page_Load(object sender, EventArgs e)

{

string name;

name = Session["name"].ToString();

}

三、Cookie

这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。Cookie通过HTTP头 在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。

与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

优点:1.使用简单,是保持用户状态的一种非常常用的方法。比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。

缺点:1.常常被人认为用来收集用户隐私而遭到批评。

2.安全性不高,容易伪造。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象:

HttpCookie objCookie = newHttpCookie("myCookie","Hello,Cookie!");

Response.Cookies.Add(cookie);

2.在目的页面的代码使用Cookie对象取出传递的值:Result = Request.Cookies[ "myCookie" ].Value;

例子:(1)a.aspx

privatevoid Button1_Click(object sender,System.EventArgs e)

{

HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");

Response.Cookies.Add(objCookie);

}

(2)b.aspx

string myName1Value;

myName1Value = Request.Cookies[ "myCookie"].Value;

四、Application

Application对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。

可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数。多个请求访问时都可以对它进行操作。

优点:1.使用简单,消耗较少的服务器资源。

2.不仅能传递简单数据,还能传递对象。

3.数据量大小是不限制的。

缺点:1.作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["Nmae"]="Value(OrObject)";

2.在目的页面的代码使用Application变量取出传递的值。Result = Application["Nmae"]

注意:常用lock和unlock方法用来锁定和解锁,为了防止并发修改。

例子:(1)a.aspx

privatevoid Button1_Click(object sender,System.EventArgs e)

{

Application["name"] = Label1.Text;

}

(2)b.aspx

privatevoid Page_Load(object sender, EventArgs e)

{

string name;

Application.Lock();

name = Application["name"].ToString();

Application.UnLock();

}

五、Server.Transfer

这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。

Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过 Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的 ASPX页面仍使用前一ASPX页面创建的应答流。

ps:比较Server.Transfer和Response.Redirect的区别。

(1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。

(2)Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。[2]

(3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则十分灵活,可以跳转到任何URL地址。

(4)Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。

优点:1.直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。

2.可以传递各种数据类型的值和控件的值。

缺点:1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。

使用方法:1.在源页面的代码中,使用Page类的Server.Transfer跳到另一个页面传递页面数据:Server.Transfer("b.aspx","false")。

2.在目的页面中,使用Context.Handler来接收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的属性和方法来获取前一个页面的值,或者直接用Context.Items["myParameter "]

例子:(1)a.aspx

publicstring Name

{

get{ return Label1.Text;}

}

privatevoid Button1_Click(object sender,System.EventArgs e)

{

Server.Transfer("b.aspx");

}

(2)b.aspx

privatevoid Page_Load(object sender, EventArgs e)

{

a newWeb; //实例a窗体

newWeb =(source)Context.Handler;

string name;

name = newWeb.Name;

}

ASP.NET页面传值的几种方式的更多相关文章

  1. ASP.Net中页面传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  2. ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式

    准备 在Models文件夹里面新添加Student实体类,用来模拟从Controller向View传递数据,Student类定义如下: using System; using System.Colle ...

  3. ASP.NET 页面传值得9种方式

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

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

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

  5. ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  6. 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

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

    ASP.NET页面间传值的几种方式 1.使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在 ...

  8. ASP.NET页面之间的几种传值方法

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

  9. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】

    阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...

随机推荐

  1. 搭建Hadoop集群 (三)

    通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种D ...

  2. poj 1724 ROADS 最短路

    题目链接 n个节点, m条边, 一开始有K这么多的钱, 每条边有len, cost两个属性, 求1到n的最短距离, 花费要小于k. dis数组开成二维的, dis[u][cost]表示到达u花费为co ...

  3. 数组序列的capacity及size函数

    #include<iostream>#include<vector>using namespace std;int main(){    vector<int> i ...

  4. android-SQLite 和 Content

    SQLite 游标(Cursor)相当于指向底层数据中结果集的指针,而不是提取和返回结果值的副本,是在结果集中对位置(行)进行控制的管理方式. moveToFirst:把游标移动到查询结果的第一行 m ...

  5. java 如何得到ISO 8601 时间格式

    http://blog.csdn.net/brightleo/article/details/7457004 public class DateUtil { public static String  ...

  6. Sonar入门学习

    最近在学习Sonar,配置了好几天,才搭建起来环境,为自己的学习能力感到汗颜,赶紧在此记录一下,所谓好记性不如烂笔头. 1.Sonar介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java ...

  7. WebKit的历史项管理

    标准定义 关于历史的管理,和HTML页面载入一样,都有其相应的标准.地址例如以下: WhatWG: https://html.spec.whatwg.org/multipage/browsers.ht ...

  8. Hadoop-04-HBase全然分布式环境搭建

    Hbase分布式具体安装步骤 Hadoop全然分布式环境已经搭建完毕(參见01_Hadoop全然分布式环境搭建). 注意:Hbase和Hadoop的版本号必须相应! 不然会出现各种问题! 这里选用的是 ...

  9. 关于js封装框架类库之DOM操作模块(一)

    在前端开发的过程中,javascript极为重要的一个功能就是对DOM对象的操作,而对其封装就是为了更好地进行DOM操作,提高浏览器的支持效率 现在给出一个案例:页面创建三个div,然后给其添加样式 ...

  10. Sql Server 2008/2005 数据库还原出现 3154错误

    在Sql Server 2008/2005 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决 ...