ASP.Net页面传值比较

作为一个ASP.Net程序员,尤其是搞B/S开发的,对于不同页面之间变量值的传递用的非常广泛,而掌握不同方式之间的区别和特点也就很有必要。本文将针对这一知识点做一个简单的总结。

页面之间传值大致可以分为以下几种:通过Get方式传递,通过Post方式传递,通过Session方式,通过Cookie方式和,通过Application方式,通过Cache方式,通过页面属性方式和通过静态变量的方式。下面将对于以上几种方式作一个对比:

1、Get方式:通过Get方式在页面之间传值用的非常普遍,用法也非常简单,只需将需要传递的参数附在Url后边即可,如:要访问当前页面,http://www.cnblogs.com/xsyblogs/admin/EditPosts.aspx?opt=1,我们可以看到在Url的最后,有一个“opt=1”的字样,这即我们要传递的参数。在当前页面,如果我们要获取这个参数,只需通过Request.Querystring("opt")方法,即可获取到传递的参数值。因为其是将参数附在Url中,所以其安全性也就可想而知了,但是对于像传递要获取的页码,要获取文章的ID这类参数非常有用。Get方式还有一个致命的缺陷就是最长只能传递255个字符,但对于简单、少量的数据还是非常有用。

2、Post方式:用的最多的除了Get也就是Post了,相对于Get而言,Post似乎更安全,它通过将需要提交的数据封装在隐藏域中,虽然稍微懂点开发的朋友都知道Post方式提交也可以通过浏览器的开发工具来查看,但对于我们平时使用来说,已经足够了。如果需要通过Post方式提交数据,必须有name属性,在服务端通过Request.Form("keyword")的方式获取。Post方法适用于大数据,包括文件上传。

对于Get方式和Post方式的区别在这里稍微给出一个对比:见下图。

3、Session方式

Session方式也是很常见的一种保存页面值的方法,它将用户数据存储在服务器端,将一个ID存放在客户端作为与服务端验证的标记。我们可以把用户名放在Session中,这样就能通过判断Session中某个key的值来判断用户是否登录,登录的话用户名又是多少。Asp.Net中可以设置Session的存储方式,位置,SessionId的保存是否依赖于Cookie。Session的存储有三种方式:

Inproc(默认),Session存储在IIS进程中。

StateServer,Session存储在独立的Windows服务进程中(可以不是Web服务器)。

SqlServer,Session存储在SqlServer数据库的表中(SqlServer服务器)。

虽然InProc模式的Session直接存储在Web服务器IIS进程中,速度比较快,但是每次重新启动IIS都会导致Session丢失。利用后两种模式,我们就完全可以把Session从Web服务器中独立出来,从而减轻Web服务器的压力,同时减少Session丢失的概率。

因此,SessionID存储在客户端(可以是Cookie或者URL),其他都存储在服务端(可以是IIS进程、独立的Windows服务进程或者SQL Server数据库中)。

Session原理图如下:

4、Application方式

将数据存储于Application,相当于一个全局变量,整个站点数据共享,在整个应用程序的生命周期内都是有效的,适用于所有页面,所有用户共享的数据。其适用方法类似于Session,也是通过键值对的形式来取值和赋值。

5、Cookie方式

Cookie方式不失为将数据保存在客户端的经典方式。但由于存储在客户端,其安全性低,受客户端设置的限制。下面请看Cookie原理图:

6、Cache方式

Cache在页面传值这里用的不是太普遍,但也有这方面的功能。Cache主要是将用户数据存储在服务器数据缓存中,可以直接存储对象,但是对数据的更新不及时。用法:Cache["username"]="xiaosy";

7、页面属性

这里所说的页面属性是指利用HttpContext获取发请求的页面的信息。我们常说页面类对象,既然通过HttpContext把这个页面类对象都拿到了,又何愁拿不到里面的变量呢?但是通过这种方式有一点要注意,就是强制转换类型一定要正确,不然就啥也拿不到哦。这里举两个例子:

获取控件的值:

//发送页面
 <input type="button" id="generateThum" value="生成"/>
    <asp:TextBox ID="txtBox1" runat="Server" Text="xiaosy"></asp:TextBox>
    <asp:Button runat="server" ID="btnButton" Text="去别的页面" OnClick="btnButton_Click"/>

 protected void btnButton_Click(object sender, EventArgs e)
        {
            Server.Transfer("WebForm2.aspx");
        }
//接收页面
<asp:Label runat="server" ID="label1"></asp:Label>

protected void Page_Load(object sender, EventArgs e)
        {
            WebForm1 webForm1 =(WebForm1)Context.Handler;
            label1.Text = ((TextBox)webForm1.FindControl("txtBox1")).Text;
        }

  获取公共变量:

//发送的页面
  public string userName = "xiaosy";
        protected void btnButton_Click(object sender, EventArgs e)
        {
            Server.Transfer("WebForm2.aspx");
        }
//接收的页面
 if (Context.Handler is WebForm1)
            {
                WebForm1 webForm1 = (WebForm1)Context.Handler;
                this.label1.Text = webForm1.userName;//获取公共变量
            }

   另外还可以通过以下这种方式获取值:

//发送的页面
protected void btnButton_Click(object sender, EventArgs e)
        {
            Context.Items["name"] = txtBox1.Text;
            Server.Transfer("WebForm2.aspx");
        }
//接收的页面
 protected void Page_Load(object sender, EventArgs e)
        {
            if (Context.Handler is WebForm1)
            {
                this.label1.Text = Context.Items["name"].ToString();
            }

        }

  8、静态变量方式

静态变量就是申明一个变量,然后赋值,然后在需要用的时候再取这个变量的值。在这里就不举例了。

9、ViewState

ViewState是Asp.Net特有的页面保持机制,用来恢复页面的状态,无状态的Http请求也因为有了ViewState的存在而变得有状态。ViewState主要是将页面各控件及其所存数据序列化存在name为_ViewStated的隐藏域中。主要适用于页面PostBack需要保存的数据,数据太大也会影响页面发送效率。其原理图如下:

时间: 2024-10-29 19:06:23

ASP.Net页面传值比较的相关文章

ASP.NET页面传值

这个问题是上周去远洋公司面试的一道笔试题,面试的时候面试官也问到了,虽然事先有所准备当时也回答上了,但是从根本上说自己还不太理解.正好这两天做高效平台评教系统的时候用到了页面传值,就又从网上查了一些相关资料. 常用的页面传值有以下几种:QueryString传值,Session传值,Cookies传值,Application以及Transfer传值.下面我们就一起了解一下各种传值方式的工作机制.相互联系以及优缺点. QueryString传值: QueryString传值又称作URL传值,是我们

ASP.NET页面传值的方法

ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方式,估计往往很难全面.一. 使用QueryString变量 QueryString是一种非常简单也是使用比较多的一种传值方式,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法. Response.Redirect( "target.as

ASP.NET页面传值与跳转

asp.net页面传值的五种方法:QueryString,Session,Application,Request.Cookies,Server.Transfer 其中Cookie和Server.Transfer两种方式不同于前面三种,Server.Transfer充分体现了面向对象思想. 首先新建webForm项目,然后添加WebForm1和WebForm2页面. WebForm1.aspx页面客户端对象代码如下 <%@ Page Language="C#" AutoEventW

Asp.Net页面传值方式总结

通过学习asp.net,其中讲到最多的便是控件的使用,而控件使用中最大的不同便是在对页面进行传值时,与C/S学习中有很大的不同.视频中讲的比较零碎,把那些搬来总结一下. 在asp.net中新建一个web窗体的表单(form1),在表单中进行提交数据. <span style="font-size:18px;"><form id="form1" method="post/get" action ="WebForm1.as

Asp.Net页面传值的方法简单总结【原创】

1.QueryString 当页面上form按照get的方式向页面发送请求数据的时候,web server会将请求数据放入 一个QEURY_STRING的环境变量中,然后通过QeueryString方法从这个变量中获取相应的参数. 例如: 发送参数页面Test1.aspx 按钮单击代码: string url = "Test2.aspx?id="+ txtId.Text; Response.Redirect(url); 接收参数页面 Test2.aspx 后台代码获取:string i

ASP.NET页面传值加号变空格解决办法

只需要把欲传值进行编码 string EncodeId = Server.UrlEncode(id); 加号就变成了 % 2 B  (中间无空格) 然后再传出去. Request.QueryString默认会自动解码的,UrlDecode,所以直接获取即可.(服务器不需要解码,解码反而会出错) 这样,就不会再是空格了.

ASP.NET - 页面传值 Request.QuerString[].ToString();

public partial class WebForm2 : System.Web.UI.Page { BLL.CategoryBLL categorybll = new CategoryBLL(); BLL.NewsBLL newsbll = new NewsBLL(); //接收分类ID string NewsId = string.Empty; protected void Page_Load(object sender, EventArgs e) { //接收分类ID NewsId =

ASP.NET页面之间传值

介绍: 在网页应用程序的开发中,页面之间的传值应该是最常见的问题了. 在这篇文章里,azamsharp 将为我们介绍一些ASP.NET页面传值的方式.本文所举的例子非常简单,仅仅包含了一个文本框和几个按钮,当按钮点击时文本框中的字符串将会以不同的方式传递到另外的页面去. 1. Response.Redirect (或称 Query String 方式.URL方式) 1 Response.Redirect("WebForm5.aspx");   首先让我们看看 Response.Redi

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

首先是QueryString方法传值: QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了. 这种方法的优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效. 这种方法的缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的. 2.不能传递对象. 使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址. 2.在