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

合集下载

Flutter页面传值的几种方式

Flutter页面传值的几种方式

Flutter页⾯传值的⼏种⽅式今天来聊聊Flutter页⾯传值的⼏种⽅式:InheritWidgetNotificationEventbus(当前Flutter版本:2.0.4)InheritWidget如果看过Provider的源码的同学都知道,Provider跨组件传值的原理就是根据系统提供的InheritWidget实现的,让我们来看⼀下这个组件。

InheritWidget是⼀个抽象类,我们写⼀个保存⽤户信息的类UserInfoInheritWidget继承于InheritWidget:class UserInfoInheritWidget extends InheritedWidget {UserInfoBean userInfoBean;UserInfoInheritWidget({Key key, erInfoBean, Widget child}) : super (child: child);static UserInfoWidget of(BuildContext context){return context.dependOnInheritedWidgetOfExactType<UserInfoWidget>();}@overridebool updateShouldNotify(UserInfoInheritWidget oldWidget) {return erInfoBean != userInfoBean;}}我们在这⾥⾯定义了⼀个静态⽅法:of,并且传⼊了⼀个context,根据context获取当前类,拿到当前类中的UserInfoBean,其实获取主题数据也是根据InheritWidget这种⽅式获取Theme.of(context),关于of⽅法后⾯重点讲⼀下,updateShouldNotify 是刷新机制,什么时候刷新数据还有⼀个⽤户信息的实体:class UserInfoBean {String name;String address;UserInfoBean({, this.address});}我们做两个页⾯,第⼀个页⾯显⽰⽤户信息,还有⼀个按钮,点击按钮跳转到第⼆个页⾯,同样也是显⽰⽤户信息:class Page19PassByValue extends StatefulWidget {@override_Page19PassByValueState createState() => _Page19PassByValueState();}class _Page19PassByValueState extends State<Page19PassByValue> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('PassByValue'),),body: DefaultTextStyle(style: TextStyle(fontSize: 30, color: Colors.black),child: Column(children: [Text(UserInfoWidget.of(context)!),Text(UserInfoWidget.of(context)!.userInfoBean.address),SizedBox(height: 40),TextButton(child: Text('点击跳转'),onPressed: (){Navigator.of(context).push(CupertinoPageRoute(builder: (context){return DetailPage();}));},)],),),);}}class DetailPage extends StatefulWidget {@override_DetailPageState createState() => _DetailPageState();}class _DetailPageState extends State<DetailPage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Detail'),),body: DefaultTextStyle(style: TextStyle(fontSize: 30, color: Colors.black),child: Center(child: Column(children: [Text(UserInfoWidget.of(context)),Text(UserInfoWidget.of(context).userInfoBean.address),TextButton(onPressed: () {setState(() {UserInfoWidget.of(context)!.updateBean('wf123','address123');});},child: Text('点击修改'))],),),));}}由于我们这⾥是跨组件传值,需要把UserInfoWidget放在MaterialApp的上层,并给UserInfoBean⼀个初始值:class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return UserInfoWidget(userInfoBean: UserInfoBean(name: 'wf', address: 'address'),child: MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: MyHomePage(title: 'Flutter Demo Home Page'),),);}}这样就实现了⼀个跨组件传值,但是还有个问题,我们给UserInfoWidget赋值的时候是在最顶层,在真实业务场景中,如果我们把UserInfo的赋值放在MaterialApp上⾯,这时候我们还没拿到⽤户数据呢,所以就要有⼀个可以更新UserInfo的⽅法,并且修改后⽴即刷新,我们可以借助setState,把我们上⾯定义的UserInfoWidget改个名字然后封装在StatefulWidget 中:class _UserInfoInheritWidget extends InheritedWidget {UserInfoBean userInfoBean;Function update;_UserInfoInheritWidget({Key key, erInfoBean, this.update, Widget child}) : super (child: child);updateBean(String name, String address){update(name, address);}@overridebool updateShouldNotify(_UserInfoInheritWidget oldWidget) {return erInfoBean != userInfoBean;}}class UserInfoWidget extends StatefulWidget {UserInfoBean userInfoBean;Widget child;UserInfoWidget({Key key, erInfoBean, this.child}) : super (key: key);static _UserInfoInheritWidget of(BuildContext context){return context.dependOnInheritedWidgetOfExactType<_UserInfoInheritWidget>();}@overrideState<StatefulWidget> createState() => _UserInfoState();}class _UserInfoState extends State <UserInfoWidget> {_update(String name, String address){UserInfoBean bean = UserInfoBean(name: name, address: address);erInfoBean = bean;setState(() {});}@overrideWidget build(BuildContext context) {return _UserInfoInheritWidget(child: widget.child,userInfoBean: erInfoBean,update: _update,);}}上⾯把继承⾃InheritWidget的类改了⼀个名字:_UserInfoInheritWidget,对外只暴露⽤StatefulWidget封装过的UserInfoWidget,向_UserInfoInheritWidget传⼊了包含setState的更新数据⽅法,更新数据的时候通过UserInfoWidget.of(context)获取到继承于InheritWidget的_UserInfoInheritWidget类,调⽤updateBean⽅法实际上就调⽤了包含setState的⽅法,所以做到了数据更新和页⾯刷新下⾯重点说⼀下UserInfoWidget.of(context)是如何获取到继承于InheritWidget类的对象的,通过查看类似的⽅法:Theme.of(context)发现是根据dependOnInheritedWidgetOfExactType,于是我们也照着它的样⼦获取到了_UserInfoInheritWidget,点到dependOnInheritedWidgetOfExactType源码中看⼀下,发现跳转到了BuildContext中定义了这个⽅法:T? dependOnInheritedWidgetOfExactType<T extends InheritedWidget>({ Object? aspect });了解Widget、Element、RenderObject三只之间关系的同学都知道,其实context是Element的⼀个实例,BuildContext的注释也提到了这⼀点:我们可以在Element中找到这个⽅法的实现:@overrideT? dependOnInheritedWidgetOfExactType<T extends InheritedWidget>({Object? aspect}) {assert(_debugCheckStateIsActiveForAncestorLookup());final InheritedElement? ancestor = _inheritedWidgets == null ? null : _inheritedWidgets![T];if (ancestor != null) {assert(ancestor is InheritedElement);return dependOnInheritedElement(ancestor, aspect: aspect) as T;}_hadUnsatisfiedDependencies = true;return null;}_inheritedWidgets是从哪来的,我们搜索⼀下在Element中发现void _updateInheritance() {assert(_lifecycleState == _ElementLifecycle.active);_inheritedWidgets = _parent?._inheritedWidgets;}再看⼀下_updateInheritance⽅法是什么时候调⽤的@mustCallSupervoid mount(Element? parent, dynamic newSlot) {......省略⽆关代码_parent = parent;_slot = newSlot;_lifecycleState = _ElementLifecycle.active;_depth = _parent != null ? _parent!.depth + 1 : 1;if (parent != null) // Only assign ownership if the parent is non-null_owner = parent.owner;final Key? key = widget.key;if (key is GlobalKey) {key._register(this);}_updateInheritance();//这⾥调⽤了⼀次}还有:@mustCallSupervoid activate() {......已省略⽆关代码final bool hadDependencies = (_dependencies != null && _dependencies!.isNotEmpty) || _hadUnsatisfiedDependencies;_lifecycleState = _ElementLifecycle.active;_dependencies?.clear();_hadUnsatisfiedDependencies = false;_updateInheritance();//这⾥⼜调⽤了⼀次if (_dirty)owner!.scheduleBuildFor(this);if (hadDependencies)didChangeDependencies();}从上⾯代码我们可以看到每个页⾯的Element都会通过_parent向下级传递⽗级信息,⽽我们的UserInfoWidget就保存在_parent中的_inheritedWidgets集合中:Map<Type, InheritedElement>? _inheritedWidgets;,当_inheritedWidgets在页⾯树中向下传递的时候,如果当前Widget是InheritWidget,在当前Widget对应的Element中先看_parent传过来的_inheritedWidgets 是否为空,如果为空就新建⼀个集合,把⾃⼰存到这个集合中,以当前的类型作为key(这也是为什么调⽤of⽅法中的context.dependOnInheritedWidgetOfExactType⽅法为什么要传当前类型的原因),从_inheritedWidgets集合中去取值;如果不为空直接把⾃⼰存进去,这就是of的原理了。

ASP页面传值

ASP页面传值

页面之间传递值的几种方式页面传值是学习初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。

但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。

一、QueryStringQueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。

如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。

但是对于传递数组或对象的话,就不能用这个方法了。

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

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

2.不能传递对象。

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

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

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

例子:(1)a.aspxprivate void Button1_Click(object sender, System.EventArgs e){string s_url;s_url = "b.aspx?name=" + Label1.Text;Response.Redirect(s_url);}(2)b.aspxprivate void Page_Load(object sender, EventArgs e){Label2.Text = Request.QueryString["name"];}二、Session想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。

aspx页面传值--7种方式

aspx页面传值--7种方式

aspx页⾯传值--7种⽅式1、get⽅式发送页<form id="form1" runat="server"><div><a href="WebForm2.aspx?name=5">调转到Form2</a><asp:Button ID="button2" Text="跳转页⾯" runat="server" onclick="button2_Click"/></div></form>protected void button2_Click(object sender, EventArgs e){Response.Redirect("WebForm2.aspx?name=5");}接受页 bel1.Text = Request["name"];//bel2.Text = Request.Params["name"];//bel3.Text = Request.QueryString[0];2、post⽅式a\不带 runat="server"形式发送页<form id="form2" action="WebForm2.aspx" method="post"><input name="txtname" type="text" value="lilili" /><input type="submit" value="提交⽹页" /></form>接受页 bel1.Text =Request.Form["txtname"];b\带 runat="server"发送页<form runat="server" id="form3"><input id="btnTransfer" type="button" onclick="post();" runat="server" value="跳转" /></form><form id="form4" method="post"><input type="text" runat="server" id="txtname" value="lili" /></form><script type="text/javascript">function post() {form4.action = "WebForm2.aspx";form4.submit();}</script>接受页 bel1.Text =Request.Form["txtname"];3、Session 和 ApplicationSession["name2"] = "sessontest";Application["name3"] = "applicationtest";bel2.Text =(string)Session["name2"];bel3.Text =(string)Application["name3"];4、静态变量发送页public static string statest="static string";protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 bel1.Text = WebForm1.statest;5、Context.Handler 获取控件发送页 <asp:TextBox ID="TextBox1" runat="server" Text="lilili"></asp:TextBox><asp:Button ID="button2" Text="跳转页⾯" runat="server" onclick="button2_Click"/> protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){WebForm1 poster = (WebForm1)Context.Handler;bel1.Text = ((TextBox)poster.FindControl("TextBox1")).Text;}6、Context.Handler 获取公共变量发送页 public string testpost = "testpost";protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){WebForm1 poster = (WebForm1)Context.Handler;bel2.Text = poster.testpost;}7、Context.Items 变量发送页protected void button2_Click(object sender, EventArgs e) {Context.Items["name"] = "contextItems";Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){bel3.Text = Context.Items["name"].ToString(); }。

C#页面间传值的几种方法

C#页面间传值的几种方法

C#页面间传值的几种方法1。

使用QueryString使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。

使用这种方法的步骤如下:1,使用控件创建web表单(form)2,创建可以返回表单的按钮和链接按钮3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量4,在保存的URL里添加QueryString参数5,使用Response.Redirect重定向到上面保存的URL下面的代码片断演示了如何实现这个方法:源页面WebForm1.aspx.cs中的部分代码:private void Button1_Click(object sender, System.EventArgs e) {string url;url="WebForm2.aspx?name=" + TextBox1.Text + "&email=" +TextBox2.Text;Response.Redirect(url);}目标页面WebForm2.aspx.cs中的部分代码:private void Page_Load(object sender, System.EventArgs e) {Label1.Text=Request.QueryString["name"];Label2.Text=Request.QueryString["email"];}2。

使用Session变量使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。

但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。

web 页面之间传递参数的几种方法

web 页面之间传递参数的几种方法

如何在web页面之间传递参数在web开发中,经常会遇到在不同页面之间传递参数的需求。

这些参数可以是用户输入的数据、页面之间的状态信息,甚至是身份验证所需的凭证。

而在确保用户体验的有效地传递参数也是web开发中常见的问题之一。

本文将就web页面之间传递参数的几种方法进行全面评估,并据此撰写一篇有价值的文章。

1. URL参数传递URL参数传递是最常见的一种传递参数的方式。

通过在URL中携带参数的形式,可以方便地在不同页面之间传递数据。

我们可以通过在URL中添加“?key1=value1&key2=value2”这样的参数来传递信息。

这种方式简单直接,但由于参数会直接显示在URL中,可能会带来安全隐患和信息泄露的问题。

2. 表单提交另一种常见的传递参数的方式是通过表单提交。

用户在一个页面填写完表单后,提交表单到服务器,服务器再将参数传递到下一个页面。

这种方式适用于需要用户输入数据并传递到下一个页面的场景,但对于一些简单的参数传递来说,可能会显得过于繁琐。

3. Cookie和SessionCookie和Session是web开发中常用的状态保持机制,也可以用来传递参数。

通过在客户端存储数据,下一个页面可以再次读取这些数据,实现参数的传递。

但需要注意的是,由于涉及到用户隐私信息的存储和传递,需要特别注意安全性和合规性。

4. AJAX请求在现代web应用中,通过AJAX进行页面间数据交互也是一种常见的方式。

通过异步的方式请求数据,并在页面中使用JavaScript来处理返回的数据,可以实现页面之间参数的传递。

这种方式在提高用户体验的也需要注意数据的完整性和安全性。

总结回顾在web开发中,传递参数是一个常见的需求,而选择合适的传递方式也是至关重要的。

无论是通过URL参数、表单提交、Cookie和Session,还是AJAX请求,都需要根据实际场景选择合适的方式。

在使用这些方法的过程中,还需要注意数据的安全性和合规性,以确保用户信息的安全传递。

JSP页面间传递参数

JSP页面间传递参数

JSP页面间传递参数有时还需要多个JSP页面间传递参数。

下面介绍一下实现的方法。

(1)直接在URL请求后添加如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a>特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码:response.sendRedirect("thexuan.jsp?action=transparams&detail=directe") ,可用request.getParameter(name)取得参数(2)jsp:param它可以实现主页面向包含页面传递参数,如下:< jsp:include page="Relative URL"> < jsp:param name="param name" value="paramvalue" /> < /jsp:include> 还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:< jsp:forward page="Relative URL"> < jsp:param name="paramname" value="paramvalue" /> < /jsp:forward> 通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数(3)设置session和request通过显示的把参数放置到session和request中,以达到传递参数的目的session.setAttribute(name,value); request.setAttribute(name,value) 取参数:value=(value className)session.getAttribute(name); value=(value className)request.getAttribute(name); 大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和request中的对象的属性被看作ng.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。

几种JSP页面传值方式

几种JSP页面传值方式
script type="text/javascript">
function demo(){
var v = document.all('username').value;
location.replace("V.jsp?username="+v+"&age=25");
}
</script>
<input type="text" name="username"><br>
<input type="button" value="href点击" onclick="location.href='V.jsp?pwd=123456'"><BR>
<input type="button" value="replace点击"
onclick="location.replac('V.jsp?pwd=123456789')">
<br>
<input type="button" value="动态取值" onclick="demo()">
注:数用button
a.
<input name="btnModify" type="button" class="button1" onClick="self.location='client_modify.jsp?id=<%=id %>'"

东航.net面试题

东航.net面试题

东航.net面试题一、简述 private、 protected、 public、 internal 修饰符的访问权限。

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 当前程序集内可以访问。

二、列举 页面之间传递值的几种方式。

1.使用QueryString, 如....?id=1; response. Redirect()....2.使用Session变量3.使用Server.Transfer4.Cookie传值三、中的五个主要对象Connection:主要是开启程序和数据库之间的连接。

没有利用连接对象将数据库打开,是无法从数据库中取得数据的。

Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。

这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。

这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。

DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。

DataSet对象可以说是 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.使用QueryString使用QueryString在页面间传递值是一种非常常见的方法,我们在ASP中就常常用到。

(1)优点和缺点优点:优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效。

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

2.不能传递对象。

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

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

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

(3)应用举例1.源页面*.aspx的代码:private void Button1_Click(object sender, System.EventArgs e){String urlAddress;string Name1;string Name2;string Name3;string Name1Value = "HelloName1";int Name2Value = 1234567;string Name3Value = "你好名称3";urlAddress="destinationWebForm.aspx?Name1=" + Name1Value + "&" + "Name2=" + Name2Value.ToString() + "&" + "Name3=" + Name3Value;Response.Redirect(urlAddress);}2.目的页面destinationWebForm.aspx的代码:private void Page_Load(object sender, System.EventArgs e){String myName1Value;int myName2Value;string myName3Value;myName1Value = Request.QueryString["Name1"];myName2Value=Convert.ToInt32(Request.QueryString["Name2"]);myName3Value = Request.QueryString["Name3"];}(4)可能出现的问题1在处理Resonse.QueryString函数汉字参数传递时,发生不能完整传递参数的具体值的错误,解决有两个方法。

方法一:需要重新设置Web.config中的encoding和全球化设置。

1、首行:<?xml version="1.0" encoding="utf-8" ?>更改为:<?xml version="1.0" encoding="GB2312" ?>2、<!-- 全球化此节设置应用程序的全球化设置。

--><globalizationrequestEncoding="utf-8"responseEncoding="utf-8 "/>更改为:<!-- 全球化此节设置应用程序的全球化设置。

--><globalizationrequestEncoding="GB2312"responseEncoding="GB 2312"/>[1]方法二:使用Server.UrlEncode和Server.UrlDecode对汉字或者特殊字符进行编码和解码。

二、使用Application变量使用Application变量是在页面间传递值的第二种方式。

Application变量在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。

它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。

举个例子来解释:网站访问的计数器变量一般采用Application变量,多个请求访问时共享这一个变量,均可对它进行操作,该变量可以被整个应用程序的各个页面直接使用。

用户登陆的帐号名一般采用Session变量,多个请求访问时有各自的Session变量,只能对自己的该Session变量进行操作,整个应用程序的各个页面直接使用这个变量来获得用户的基本信息。

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

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

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

缺点:1.作为全局变量容易被误操作。

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

Result = Application["Nmae"](3)应用举例1.源页面*.aspx的代码:private void Button1_Click(object sender, System.EventArgs e){string Name1Value = "HelloName1";int Name2Value = 1234567;Application["Name1"] = Name1Value;Application["Name2"] = Name2Value;}2.目的页面*.aspx的代码:private void Page_Load(object sender, System.EventArgs e){string myName1Value;int myName2Value;myName1Value = Application["Name1"].ToString();myName2Value = (int)Application["Name2"];}三、使用Session变量使用Application变量是在页面间传递值的第三种方式。

Session变量和Application变量非常类似,它们的区别也已经在上面关于Application变量时提到了。

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

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

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

(2)使用方法1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Nmae"]="Value(Or Object)";2.在目的页面的代码使用Session变量取出传递的值。

Result = Session["Nmae"](3)应用举例与Application变量类似,只是将Application替换为Session即可。

四、使用Cookie对象使用Cookie对象是在页面间传递值的第四种方式。

Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。

所以Cookie也可以在页面间传递值。

Cookie通过HTTP头在浏览器和服务器之间来回传递的。

Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。

可以通过遍历Request对象的Cookie集合可以获得所有的浏览器所有的Cookie。

方法如下:foreach (string strKey in Request.Cookies){lblCookies.Text += strKey + "=" + Request.Cookies[ strKey ].Value;}(1)优点和缺点优点:1.使用简单,是保持用户状态的一种非常常用的方法。

比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。

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

(2)使用方法1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象:HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");Response.Cookies.Add(co okie);2.在目的页面的代码使用Cookie对象取出传递的值:Result = Request.Cookies[ "myCookie" ].Value;(3)应用举例1.源页面*.aspx的代码:private void Button1_Click(object sender, System.EventArgs e){HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");Response.Cookies.Add(objCookie); }2.目的页面*.aspx的代码:private void Page_Load(object sender, System.EventArgs e){string myName1Value;myName1Value = Request.Cookies[ "myCookie" ].Value;}五、使用Server.Transfer使用Server.Transfer变量是在页面间传递值的第五种方式。

上面的四个方法我们在ASP中常常使用,但是这个方法是在中新出现的。

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

调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

相关文档
最新文档