当前位置: 首页 > 编程日记 > 正文

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

页面传值是学习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页面之间传递值的几种方法

相关文章:

下一代安全威胁的内幕故事

当伊朗总统马哈茂德艾哈迈迪-内贾德在去年11月份宣布该国的核计划遭到软件***后,他证实了许多安全研究人员的猜测:原因是Stuxnet大爆发,篡改了控制处理铀所用的离心机电机的关键系统。 内贾德对这起***造成的影响轻描淡写&#xf…

国内少儿眼中的编程:“Coding即是代码”?

作者 | Greg Satell译者 | 刘旭坤责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【编者按】上一个时代流行从小学奥数,现在“编程要从宝宝抓起”已经开始疯狂流行。随着 2017 年国务院印发《新一代人工智能发展规划》&#…

西门子发布最新版NX软件 助力零件制造的数字化

SiemensPLMSoftware近日发布最新版NXTM软件,集成了用于增材制造、计算机数控(CNC)加工、机器人和质量检测等新一代工具,以实现在统一的、集成的、端到端的系统中实现零件制造的数字化。 其中,用于计算机辅助制造(CAM)的先进自动化功能&#x…

【Qt】Qt国际化

参考博客:https://blog.csdn.net/hebbely/article/details/69388763 Qt官网:http://doc.qt.io/qt-5/linguist-manager.html 使用的工具 lupdate --> linguist --> lrelease 使用步骤 tr 在程序中将需要翻译的文本使用tr()函数来处理 修改pro…

回到未来 – 大胆畅想如何追赶并超越腾讯模式

其实,明天是什么样子,它就会是什么样子。 我总是喜欢幻想,无论是对过去还是对未来,对生活或是对爱情。 不过憧憬多过幻想。 一直比较关注互联网的动态,想象如果某某公司的某件产品如果是自己的&…

Python如何爬取实时变化的WebSocket数据

作者 | 韦世东来源 | 进击的Coder(公众号id:FightingCode)一、前言作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图:Web 领域中…

【Qt】Qt样式表总结(四):CSS盒子模型

官网:http://doc.qt.io/qt-5/stylesheet-customizing.html#box-model 【Qt】Qt样式表总结(一):选择器 【Qt】Qt样式表总结(二):冲突和命名空间 【Qt】Qt样式表总结(三):QObject 属性 盒子模型 先来张图片,引自Qt官网 使用样式表时, 每个小部件都被视为具有四个同…

1.试述大数据对思维方式的重要影响。 2.详细阐述大数据、云计算、物联网之间的区别与联系。 3.简述你对大数据应用与发展的看法,以及你在这次大数据浪潮中想扮演什么角色。...

1.大数称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。所以利用大数据的人们思维更加的敏锐,也会对人们的思维方式产生扩大化,通过大量的数据进行分析,从而形成…

有关GetPrivateProfileString的使用方法

函数返回值为string的长度(long型),而从ini文件获得的字符串则保留在目的缓冲器中 DWORD GetPrivateProfileString( LPCTSTR lpAppName, //配置文件的section名 LPCTSTR lpKeyName, //配置文件的key名 LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPC…

【Qt】QDebug和log4cplus的联合使用

问题描述 项目开始时,只使用QDebug将调试信息打印到终端上。后期添加了日志管理系统,比如log4cplus。如何在不修改打印语句,比如还使用qDebug,就能将日志打印到文件中。 解决方法 使用qInstallMessageHandler将调试消息重定向功…

75道常见AI面试题,看看你的知识盲点在哪?(附解析)

整理 | AI科技大本营出品 | AI科技大本营(公众号id:rgznai100)【导语】正值求职、跳槽季,无论你是换工作还是找实习,没有真本事都是万万不行的,可是如何高效率复习呢?之前我们给大家推荐了一份 …

Flex画流程图

<?xml version"1.0" encoding"utf-8"?><mx:Application xmlns:mx"http://www.adobe.com/2006/mxml" layout"absolute" creationComplete"initApp()"> <mx:Canvas id"paper" x"30" y&q…

【Qt】Qt信号与槽使用不当,使程序崩溃

问题描述 跨线程使用Qt信号和槽&#xff0c;信号发送时间间隔小于槽函数处理时间时&#xff0c;造成程序崩溃。 原因分析 跨线程使用Qt信号和槽时&#xff0c;connect默认是QueuedConnection&#xff0c;队列连接方式。 信号传递给槽函数的参数&#xff0c;分配内存后放入队…

70亿美金!英伟达欲竞购这家以色列芯片公司!

整理 | 琥珀出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;近日&#xff0c;据国外财经媒体 Calcalist 报道&#xff0c;英伟达已给出报价&#xff0c;竞购以色列芯片设计公司迈络思&#xff08;MellanoxTechnologies&#xff09;。实际上&#xf…

Mysql安全配置

zhangsan 2014/06/14 11:550x01 前言很多文章中会说&#xff0c;数据库的权限按最小权限为原则&#xff0c;这句话本身没有错&#xff0c;但是却是一句空话。因为最小权限&#xff0c;这个东西太抽象&#xff0c;很多时候你并弄不清楚具体他需要哪些权限。 现在很多mysql用着r…

【C++】Google C++编码规范(一):作用域

1、文件作用域&#xff1a; 在.cpp文件中&#xff0c;C使用匿名名字空间来表示文件作用域&#xff0c;C使用static来表示&#xff1b; 2、局部变量 局部变量在声明的同时&#xff0c;进行显示初始化&#xff1b;比起隐式初始化再赋值要高效&#xff1b; 局部变量的作用域要尽…

华为 | 人生苦短,码短情长,有场大Party等你来Pick!

上学时&#xff0c;书上说C语言是上帝的语言。我同屋的兄弟不服&#xff0c;他说PHP才是最好的语言。毕业之后&#xff0c;我们Team的老大却坚信&#xff1a;Life is short&#xff0c;只用Python……现在&#xff0c;作为一个真正的开发者&#xff0c;我发现用什么语言一点点都…

设置进程优先级

//取得本进程id HANDLE hProcess GetCurrentProcess(); //设置本进程的优先级 int stat SetPriorityClass(hProcess, NORMAL_PRIORITY_CLASS);

Deep Reading | 从0到1再读注意力机制,此文必收藏!

译者 | forencegan编辑 | 琥珀出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【AI科技大本营导语】注意力机制&#xff08;Attention&#xff09;已经成为深度学习必学内容之一&#xff0c;无论是计算机视觉还是自然语言处理都可以看到各种各样注意力机制的方法。之…

【C++】Google C++编码规范(二):类

1、构造函数 不要在构造函数中进行复杂的初始化 (尤其是那些有可能失败或者需要调用虚函数的初始化). 构造函数不得调用虚函数, 或尝试报告一个非致命错误. 如果对象需要进行有意义的 初始化, 考虑使用明确的 Init() 方法或使用工厂模式. 2、初始化 第一种方法&#xff1a;构…

Flask与Django对比

Flask与Django对比 Django vs FlaskFlask框架之间的差别 Django功能大而全&#xff0c;Flask只包含基本的配置 Django的一站式解决的思路&#xff0c;能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板&#xff0c;表单&#xff0c;路由&#xff0c…

windows下apache配置虚拟主机的两个方法

windows下apache配置虚拟主机方法一&#xff1a; 对httpd.conf进行设置&#xff1a;1.注释以下三行#ServerAdmin#ServerName#DocumentRoot2&#xff0e;去掉mod_proxy.so和mod_proxy_ajp.so的注释3&#xff0e;#Virtual hosts#Include conf/extra/httpd-vhosts.conf &#xff0…

大疆、港科大联手!双目3D目标检测实验效果大放送 | CVPR 2019

作者 | heryms责编 | JaneCVPR 2019的文章出来了&#xff0c;今天聊聊双目的 3D object detection。这是一篇来自 DJI &#xff08;大疆&#xff09;与港科大合作的文章《Stereo R-CNN based 3D Object Detection for Autonomous Driving》&#xff0c;作者分别是 Peiliang Li&…

【C++】Google C++编码规范(三):智能指针

【C】Google C编码规范&#xff08;一&#xff09;&#xff1a;作用域 【C】Google C编码规范&#xff08;二&#xff09;&#xff1a;类 std::unique_ptr std::unique_ptr是C11标准里新推出的智能指针&#xff0c;用来表示动态分配出的对象的「独一无二」所有权&#xff1b…

Django restful-framework初步学习

urls.py from django.conf.urls import include, url from django.contrib import admin from rest_framework import routers # 导入api路由 from app01 import apirouter routers.DefaultRouter() # 获取api路由对象 router.register(rusers, api.UserViewSet) # 注册路由到…

植树节,程序员要爬哪些“树”?

作者 | 程序猿小吴、进击的Hello_World转载自五分钟学算法&#xff08;ID: CXYxiaowu&#xff09;公历 3 月 12 日是一年一度的植树节。旨在宣传保护森林&#xff0c;并动员群众参加植树造林活动。说到树&#xff0c;程序猿们肯定不陌生&#xff0c;趁着这个植树节&#xff0c;…

把JS 脚本嵌入CS运行

下面这段视频&#xff0c;是让您知道怎样把播放器的javascript放入C#类别中。在调用这个类别时&#xff0c;只传入相关的参数&#xff0c;即可运行。一时类别封装了&#xff0c;在前台xxx.aspx或xxx.aspx.cs看不到播放器的代码。 另一个就是在CS内怎样运行Javascript脚本。此工…

【C++】Google C++编码规范(四):其他C++

引用参数 所有按引用传递的参数必须加上const; 这在Google Code上是一个硬性约定&#xff1a;输入参数是值参或const的引用参数&#xff0c;输出参数为指针&#xff0c;输入参数可以是const指针&#xff0c;但决不能是非const的引用参数&#xff0c;除非用于交换&#xff0c;比…

使用Ceph集群作为Kubernetes的动态分配持久化存储

2019独角兽企业重金招聘Python工程师标准>>> 使用Docker快速部署Ceph集群 &#xff0c; 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储。 Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ceph-common 1. 为kubernetes创建一个存储池 1 2 #…

Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三

本文的代码包以cosmos-12304.zip为例&#xff08;从这个包开始&#xff0c;COSMOS的内核算是有了个基本的雏形&#xff0c;就像是一颗大树在出芽前会先长出庞大的根系&#xff0c;现在就要破土长出第一颗芽了&#xff09; IL2CPU之于COSMOS就相当与GCC之于LINUX&#xff0c;查看…