大致概括一下,ASP.NET 页面之间传递值得方式大致可以分为如下几种:Request.QueryString["name"],Request.Form("name"),Session,Cookie,Cache,Application,Server.Transfer,Database,HttpContext的Item属性,Files,DataBase等等。

一、Request.QueryString

视图页面直接获取url get传值,1.@Request.QueryString["look"]2.@ViewContext.RequestContext.HttpContext.Request.Params["look"]

protected void getQueryString_Click(object sender, EventArgs e){string QueStr = Request.QueryString["name"];Response.Write(QueStr);}

总结:

1、Request.QueryString:获取http查询字符串变量集合。有两重载,即Request.QueryString[string name]和Request.QueryString[int index];

2、Request.QueryString主要是获取url中的“?”之后的参数,如url:a.aspx?name="queryString",则Request.QueryString["name"]的值为“queryString”。

二、Request.Form

protected void getQueryString_Click(object sender, EventArgs e){string strQueForm = Request.Form["TextBox1"];Response.Write(strQueForm);}

总结:

1、Request.Form 获取窗体变量集合。有两重载,即Request.Form[string name]和Requst.Form[int index]。

2、获取表单指定名字的参数值。

三、Session

//a、创建Sessionpublic void createSession(string[] arrStr){//创建数组string[] str=new string[arrStr.Length];for (int i = 0; i < arrStr.Length; i++){str[i] = i.ToString();Session[str[i]] = arrStr[i];}}
//b、获取Session的值
string  getSessionValue=Session["name"].ToString();//c、遍历Session
public void getSession(){IEnumerator sessionEnum = Session.Keys.GetEnumerator();while (sessionEnum.MoveNext()){Response.Write(Session[sessionEnum.Current.ToString()].ToString()+";");}}//d、清空Session,但不结束会话public void clearSession(){Session.Clear();}//e、结束Session会话public void abandonSession(){Session.Abandon();}

2、Session数据存放形式和位置

<system.web><sessionState mode="Off|InProc|StateServer|SQLServer"  cookieless="true|false"  timeout="number of minutes"stateConnectionString="tcpip=server:port"  sqlConnectionString="sql connection string"  stateNetworkTimeout="number of seconds"/>
</system.web>
注解:mode:表示设置存储Session形式和位置; a、Off:禁用Session;b、Inproc:In Process缩写,表示将Session存储在IIS进程内,但注意,该种方式虽然性能高,但IIS重启是,丢失Session信息;(默认值)c、SateServer:将Session存储在ASP.NET状态服务进程中(重新启动Web运用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器);d、将Session存储在SQL Server中cookieless:设置客户端存储Session形式和位置a、true:使用cookieless模式,这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储;b、false:使用kookie模式,默认值。 timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟;stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。(默认端口42424);

sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=joye"。当mode的值是SQLServer时,这个属性是必需的;stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟;

3、Session原理

为什么引入Session?大家知道,因为http是一种无状态协议,因此,Session正弥补了这一缺陷。当然,Session作用远远不止于这些,这里就不多论述。

Session在ASP.NET中,表示客户端(Goggle,Firefox,IE等)与服务器端的会话,用来存储特定会话信息,准确来说,是用来存储特定用户信息。当客户端向服务器发送一个请求时,如登陆用户ID,服务器接收到该请求,服务器端Session产生一个与该登陆用户相关的SessionID,并将SessioID返回给客户端(Goggle,Firefox,IE等),在新会话开始时,服务器将SessionID当做cookie存储在用户的浏览器中。

总结:

1、定义:System.Web.SessionState.HttpSessionState  Page.Session //获取ASP.NET提供的当前Session对象。

2、特性:

a、Session中文意思为“会话”,在ASP.NET中,表示客户端和服务器之间的会话,web中常用会话之一。

b、Session存储在服务器端内存中。

c、Session可以存储任何类型的数据,包括自定义对象。

d、Session与Session间是相互独立的,互不干扰。

e、Session与Cookie配对使用,Session在服务器端产生SessionID,并将该SessionID返回给客户端(IE,FireFox,Google等),客户端Cookie来存储该SessionID,

整过会话过程中,只要保存SessionID的Cookie不丢失,则Session的信息就不会丢失。

f、Session保存的数据可以跨页访问,即跨页面是全局的。

g、Session不能跨进程访问,只能由该会话用户访问。

h、可以在不结束会话的条件下,清除Session信息,即调用Session.Clear();

i、当会话结束,过期,服务器就会清除Session对象。

j、Session常用于保存登录用户的ID.

四、Application

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

(2)b.aspxprivate void Page_Load(object sender, EventArgs e)
{ string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock();
}

总结:

1、Application对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中

对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。可能有人会问,既然所有用户都可以使用application

变量,那他可以用在什么场合呢?这里举个例子:网站访问数。多个请求访问时都可以对它进行操作。

2、优点:使用简单,消耗较少的服务器资源;不仅能传递简单数据,还能传递对象;数据量大小是不限制的。

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

4、在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["name"]="Value(Or Object)";在目的页面的代码使用Application变量取出传递的值。Result = Application["name"]。

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

五、Cache

//Class1
Cache["id"] = TextBox1.Text;Response.Redirect("~/WebForm1.aspx");//Class2if (Cache["id"]!=null){Label1.Text = Cache["id"].ToString();}//移除缓存
Cache.Remove("id");//如果 Cache["id"]为空,则传值失败。可使用如下方法实
//限期为10分钟Cache.Insert("id",TextBox1.Text,null,Cache.NoAbsoluteExpiration,new TimeSpan(0,10,0));

总结:

1、应用程序中的缓存机制用于将需要大量服务器资源来创建的对象存储在内存中,以此大大改进应用程序的性能。这个机制同样可以用来传值。

2、与其他方法不同的是,该方法需要设置缓存项优先级和缓存时间。因为当系统内存缺乏时,缓存机制会自动移除很少使用或优先级较低的项,从而造成传值失败。

3、该方法的优点是传递数据的大小和数量无限制,速度快。缺点是缓存机制的操作相对比较复杂。

六、Cookie

//Class1

HttpCookie httpCookie = new HttpCookie("testCookie","Page transfers by Cookie");
Response.Redirect("~/Class2.aspx");
//Class2

Label1.Text = Request.Cookies["testCookie"].Value;

总结:

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

获得以前的信息。所以Cookie也可以在页面间传递值。

2、Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。

3、与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使

用要配合ASP.NET内置对象Request来使用。

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

5、常常被人认为用来收集用户隐私而遭到批评。

6、安全性不高,容易伪造。

七、Context.Items["id"]

//Class1
Context.Items["id"]=TextBox1.Text;Server.Transfer("~/Class2.aspx");//Class2Label1.Text=Context.Items["id"].ToString();Context.Items.Remove("id"); //移除项

1、Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求、响应、以及上文中的Session 和Application 等信息。

2、可以使用此对象在网页之间共享信息,从而实现页面间的传值。

3、与使用 Form 的方法类似,该方法也能保持大量的数据,缺点也相同,但使用方法相对比较简单。

八、ViewState

//Class1
ViewState["id"]=TextBox1.Text; //数据保存
Label1.Text=ViewState["id"].ToString(); //数据取出
ViewState.Remove("id"); //数据移除

总结:

1、ViewState 是ASP.NET 用来在同一页面的多个请求之间保存和还原服务器控件视图状态的一种机制。与传统的“同一页面”不同,ASP.NET 中“同一页面”的

每一个请求都会导致服务器重新生成该页面,但是新生成的页面并不包含原来页面的数据。(页面无状态性)

2、ViewState 的任务就是保存原来页面中服务器控件视图状态的数据供新页面使用。从这个意义上讲,ViewState 也可以看作是一种在页面间传递数据的工具。

3、ViewState 的工作原理是:作为一个隐藏的窗体字段在客户端和服务器之间传递,可见,滥用ViewState 会加重页面回传的负担,从而降低应用程序的性能。

此外,ViewState 也能被控件、页面和应用程序禁用。

九、web.config和machine.config

//Class1
using System.Web.Configuration;
WebConfigurationManager.AppSettings.Set("userName",TextBox1.Text);
Response.Redirect("~/Class2.aspx");
//Class2
using System.Web.Configuration;
Label1.Text = WebConfigurationManager.AppSettings["userName"];

总结:

1、每个Web运用程序继承web.config文件和machine.config文件的设置。

2、web.config和machine.config这两种文件保存数据一般都很小,多为明文,特别适合保存一些字符串常量,如数据库连接信息。此外,web.config文件是可以

扩展的,因此,也可以用来传递变量。由于这两种文件会被自动缓存,所以不存在因磁盘IO产生的性能瓶颈等问题。要注意的是文件中某些设置会导致文件被修改后

Web运用程序的重启。

3、web.config:你可以向单个Web运用程序运用设置。例如,你可能会希望设置特定的验证方法、调试的类型、默认语言或自定义的错误页面。但如果你要使用这些

设置,必须把web.config文件放到web运用程序的根虚拟目录下。要想在Web运用程序中进一步配置自己的子目录,需要 在这些文件夹中放置附加的web.config。

(关于ASP.NET web.config文件详细介绍,可参考我另外一篇博客:ASP.NET web.config)

4、machine.config:从c:\Windows\Microsoft.NET\Framework\Framework\[Version]\Config目录中的一个叫macine.config的文件开始 配置。machine.config

文件定义支持的配置文件节,配置ASP.NET工作者进程,注册可用于高级特性(如配置文件、成员资格以及基于角色的安全等)提供程序。(关于ASP.NET machine.config

文件的详细介绍,我之后会写一篇文章来介绍)

十、Static

//class1
public static string userName;//在class1中定义静态全局变量
userName=txtBoxUserName.Text;
Response.Redirect("~/class2.aspx");
//class2
Label1.Text=Src.id;

总结:

1、这个应该是非常容易理解的,在ASP.NET中,每个页面对应一个具体的类,既然如此,那么页面之间的传递,我们就可以归结为:类与类之间数据的传递。想到这一步,问题应该

就迎刃而解了, 因为我们可以利用类之间的公关静态变量来解决这个问题。

2、若合理利用,可以有效地提高数据传递效率,但若滥用,可能会导致用户或页面间数据紊乱,存在一定风险和隐患,应谨慎使用。

提出以下问题:大家可以分析一下,以下代码有什么问题?

//Class1protected void btnRedirect_Click(object sender, EventArgs e){string userName = txtBoxUserName.Text;Response.Redirect("~/Class2.aspx");}//Class2

Lable1.Text=userName;

十一、补充常用页面之间跳转

1.最常用的页面跳转(原窗口被替代):Response.Redirect("XXX.aspx");

2.利用url地址打开本地网页或互联网:Respose.Write("<script language='javascript'>window.open('"+ url+"');</script>");

3.原窗口保留再新打开另一个页面(浏览器可能阻止,需要解除):Response.Write("<script>window.open('XXX.aspx','_blank')</script>");

4.效果同1中的另一种写法:Response.Write("<script>window.location='XXX.aspx'</script>");

5.也是原窗口被替代的 (常用于传递session变量的页面跳转):Server.Transfer("XXX.aspx");

6.原窗口保留,以对话框形式打开新窗口:Response.Write("<script>window.showModelessDialog('XXX.aspx')</script>");

7.对话框形式打开新窗口,原窗口被代替:Response.Write("<script>window.showModelDialog('XXX.aspx')</script>");

8.打开简洁窗口:Respose.Write("<script language='javascript'>window.open('"+url+"','','resizable=1,scrollbars=0,status=1,menubar=no,toolbar=no,location=no, menu=no');</script>");

9.利用vs2008端口:System.Diagnostics.Process.Start(http://localhost:3210/系统管理员.aspx);

转载于:https://www.cnblogs.com/jetdl/p/8890413.html

ASP.Net中页面传值的几种方式相关推荐

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

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

  2. 一、目前在ASP.NET中页面传值共有这么几种方式:

    一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    <form action= "target.aspx" method = "post&q ...

  3. 【转】ASP.NET中页面传值

    http://www.cnblogs.com/wenly/archive/2008/06/10/1216678.html 一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    & ...

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

    一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    <form action= "target.aspx" method = "post&q ...

  5. Asp.net中页面传值几种方式

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

  6. Struts 往jsp页面传值的三种方式 以及获取Jsp页面值得一种方式

     //传值的的第一种方式直接在action中getset方法完成值的传递 第一种方法值是放在值栈valuestack中其余两种是放在actioncontext中 this.setName(&quo ...

  7. ASP.NET实现页面跳转三种方式

    文章目录 前言 ASP.NET页面跳转比较 1. Server.Execute() 2. Server. Transfer() Server. Transfer()执行 3. Response.Red ...

  8. Asp.Net中替代Eval的两种方式

    在asp.net中的数据绑定中,我们经常会用到Eval,不过大家都知道Eval绑定是通过反射来实现的, 而反射势必会对性能造成一定的影响.不过有两种替代的方式来实现绑定数据,对性能略有提高. 1 当数 ...

  9. ASP.NET实现页面传值的几种方法

    第一种方法 通过URL链接地址传递 以下为引用的内容: send.aspx:   protected void Button1_Click(object sender, EventArgs e)    ...

最新文章

  1. 华为ac配置radius认证服务器_合作生态 | 升腾威讯云系统与华为泰山服务器完成产品互认证...
  2. 深入理解JVM虚拟机(四):Class类文件结构(一)
  3. boost::hana::mod用法的测试程序
  4. 钱德沛教授:云计算和网格计算差别何在?
  5. 互联网晚报 | 12月6日 星期一 | 荣耀线下门店超3万家;鸿蒙系统明年正式登陆欧洲;凯撒旅业与众信旅游终止合并...
  6. GhostCat - AS3工具类库(AS3 library of generic tools)
  7. asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法...
  8. C/C++调用python,opencv+python
  9. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException
  10. fragstats4.2使用
  11. PLC电力线载波简介
  12. React-Native调用系统分享组件Share组件的使用
  13. 【知乎问答】有哪些特殊的搜索引擎?
  14. Android开源库:手把手教你实现一个简单好用的搜索框(含历史搜索记录)
  15. Gtalent如何帮助HR招到薪酬专员,5条建议4点做法
  16. Java序列化,碰到serialVersionUID不一致怎么处理?
  17. stm32外设的使能,失能,复位的区别
  18. java初学求一个数的绝对值
  19. 模拟退火算法(惩罚函数法求约束优化问题)
  20. 二维码生成、扫描、图片识别(Zxing)

热门文章

  1. 欢迎使用CSDN-markdown编辑器132133
  2. glibc、uclibc的区别
  3. 一种数据结构 跳表skiplist
  4. 注释代码c语言,C/C++ 源文件删除注释代码
  5. Ubuntu SSH Algorithm negotiation failed
  6. 看了数百个PPT封面,我只想告诉你这两个套路!
  7. iOS核心动画之CoreAnimation
  8. day 012 生成器 与 列表推导式
  9. 【BZOJ】2395: [Balkan 2011]Timeismoney
  10. 三元表达式,列表解析和生成器表达式