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

2023-10-29

        页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较简单有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

private void Button1_Click(object sender, System.EventArgs e) 
{ 
  string s_url; 
  s_url = "b.aspx?name=" + Label1.Text; 
  Response.Redirect(s_url); 
}

 (2)b.aspx

private void Page_Load(object sender, EventArgs e) 
{ 
  Label2.Text = Request.QueryString["name"]; 
}

 

二、Session

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

  优点:1.使用简单,不仅能传递简单数据类型,还能传递对象。
     2.数据量大小是不限制的。

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

     2.容易丢失。

  使用方法:

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

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

  注意:session不用时可以销毁它,销毁的方法是:

                      清除一个:Session.Remove("session名");

      清除所有:Session.Clear();

例子:(1)a.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ 
  Session["name"] = Label.Text; 
}

 (2)b.aspx

private void 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 = new HttpCookie("myCookie","Hello,Cookie!");
Response.Cookies.Add(cookie); 

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

 

例子:(1)a.aspx

private void 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(Or Object)";

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

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

例子:(1)a.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ 
  Application["name"] = Label1.Text; 
}

(2)b.aspx

private void 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

public string Name 
{ 
  get{ return Label1.Text;} 
} 
private void Button1_Click(object sender, System.EventArgs e) 
{ 
  Server.Transfer("b.aspx"); 
}

 (2)b.aspx

private void Page_Load(object sender, EventArgs e) 
{ 
  a newWeb; //实例a窗体 
  newWeb = (source)Context.Handler; 
  string name; 
  name = newWeb.Name; 
}

以上就是常用的几种页面间传值的方法,我一般使用session和querystring来传值,少数情况会使用到cookie。本篇文章仅仅是介绍这几种方法的使用方法,内部原理没有过多的解释,关于session的存储方式请参见:session的存储方式和配置

  

  参考文章:1、ASP.NET页面之间传递值的几种方式

       2、ASP.NET页面之间传递值的几种方法

ASP.NET页面之间传递值的几种方式 - zhangkai2237 - 博客园 (cnblogs.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET页面之间传递值的几种方式 的相关文章

随机推荐

  • 【深度学习】AAAI 2024,14000篇投稿,大家都写了啥?

    夕小瑶科技说 原创作者 python 8月16日截稿的AAAI 2024 从投稿ID看 已超14000篇投稿 这么多投稿 大家都写了啥 今年什么话题最火 和往年相比 今年的投稿趋势又有什么变化 本文中 小编通过对比AAAI 2024与202
  • 文本分类(六):使用fastText对文本进行分类--小插曲

    需要注意的问题 1 linux mac 平台 2 标签中的下划线是两个 两个 两个 环境说明 python2 7 linux 自己打自己脸 目前官方的包只能在linux mac环境下使用 误导大家了 对不起 测试facebook开源的基于深
  • React全家桶-react-router原理实现

    29 9React课程 第05节 react全家桶 第5节 react全家桶 第5节 react全家桶 App js exact精确匹配 可以使用switch独占如果有一个匹配不会继续往下走 一般要与exact配合使用 否则下面不会执行 f
  • c++显示实例化和显示具体化

    1 实例化 instantiation 实例化是指编译器使用函数 或者是类 模板为特定类型生成函数 类 定义 编译器不会为函数 或者类 模板生成定义 只有当我们为函数 或者类 模板指定了一个特定类型时 编译器才会生成 编译器为特定类型的函数
  • git克隆项目时用户名密码是什么_git clone github项目的两种方式(http协议和ssh 协议)介绍...

    简介 在使用git来进行版本控制时 为了得一个项目的拷贝 copy 我们需要知道这个项目仓库的地址 Git URL Git能在许多协议下使用 所以Git URL可能以ssh http s git 或是只是以一个用户名 git 会认为这是一个
  • Google 奔跑吧小恐龙

    Google 奔跑吧小恐龙 在Java中 可以使用JavaFX图形框架来实现游戏界面 使用多线程技术来实现游戏循环和动画效果 以下是使用JavaFX和多线程实现奔跑吧小恐龙游戏的代码示例 1 创建游戏面板并初始化游戏元素 public cl
  • python:解决pycharm运行py文件时只有unittest选项的方法

    有时候在编完脚本开始运行时 发现某个py脚本右键运行的选项不是run 二是run in unittest 试过很多方法都不能很好的去除 主要是因为脚本中含有test字符串 一种解决方法是将脚本中所有的函数和类的test字符串改为其他的 但是
  • 二维光子晶体带隙仿真Matlab完全程序_平面波展开法

    本程序为二维光子晶体Matlab仿真程序 该结果与文献 1 Molding the flow of light p68 figure 2相互吻合 主程序 This is a simple demo for Photonic Crystals
  • MinIO

    文章目录 安装 依赖 使用 下载地址 链接 https pan baidu com s 1V qK13gpddcnlq czc v3A 提取码 yyds 安装 docker run d p 9000 9000 p 9001 9001 nam
  • 【MySQL(一)】WAL 机制

    WAL全称是write ahead log 也就是更新数据之前先更新日志 之前不太明白为什么要用这个 也查了很多博客 发现很多都没说到根本原因上 基本的解释都是什么使用redo log恢复数据之类的 其实Mysql使用WAL的原因根本就不是
  • vue 不能监听对象属性的改变

    vue 不能监听对象属性的改变 需要重新赋值后才会渲染页面 div item div 方法 commonClick index this active index this active index
  • post和get的区别

    1 get是从服务器上获取数据 post是向服务器传送数据 2 get是把参数数据队列加到提交表单的ACTION属性所指的URL中 值和表单内各个字段一一对应 在URL中可以看到 post是通过HTTP post机制 将表单内各个字段与其内
  • 表驱动法(Table-Driven Methods)

    背景 表驱动方法是一种方案 它允许您在表中查找信息 而不是使用逻辑语句 if和 case 来查明信息 实际上 您可以使用逻辑语句选择的任何内容 都可以使用表进行选择 在简单情况下 逻辑语句更容易 更直接 随着逻辑链变得越来越复杂 表格变得越
  • shell中$(( )) 与 $( ) 还有${ }的区别

    http blog zol com cn 2322 article 2321763 html 与 反引号 在 bash shell 中 与 反引号 都是用来做命令替换用 command substitution 的 所谓的命令替换与我们第五
  • [改善Java代码]警惕泛型是不能协变和逆变的

    什么叫做协变 covariance 和逆变 contravariance 在变成语言的类型框架中 协变和逆变是指宽类型和窄类型在某种情况下 如参数 泛型 返回值 替换或交换的特性 简单的说 协变是用一个窄类型替换宽类型 而逆变则是用宽类型覆
  • 第三方依赖库 AG Grid调研分析

    AG Grid依赖 为实现页面表格的展示需求 进行的技术调研 官网地址 https www ag grid com GitHub地址 https github com ag grid ag grid 核心需求 1 大数据量的支持 AG Gr
  • rxjs: ReplaySubject, switchMap, merge,mergeMap

    ReplaySubject 记录 Observable 执行中的历史值并将其回放给新的订阅者 var subject new Rx ReplaySubject 3 参数 表示缓存几个历史数据 假如参数是5 也就是缓存5个值 订阅的时候可以收
  • CMake与Make

    大家都知道 写程序大体步骤为 1 用编辑器编写源代码 如 c文件 2 用编译器编译代码生成目标文件 如 o 3 用链接器连接目标代码生成可执行文件 如 exe 但如果源文件太多 一个一个编译时就会特别麻烦 于是人们想到 为什么不设计一种类似
  • 查找字符串中指定字符的第一个下标_代码的优雅写法

    刷 leetCode 有一个题目需要实现 String indexOf 的源代码 好奇之下在 Intellij IDEA 中查看了它的源代 意外地发现源码中关于在字符串中查找指定字符的下标的优雅代码 至少比我写的优雅 于是乎我打算开个贴记录
  • ASP.NET页面之间传递值的几种方式

    页面传值是学习asp net初期都会面临的一个问题 总的来说有页面传值 存储对象传值 ajax 类 model 表单等 但是一般来说 常用的较简单有QueryString Session Cookies Application Server