ASP.Net页面传值比较

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

      页面之间传值大体能够分为如下几种:经过Get方式传递,经过Post方式传递,经过Session方式,经过Cookie方式和,经过Application方式,经过Cache方式,经过页面属性方式和经过静态变量的方式。下面将对于以上几种方式做一个对比:web

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

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

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

   三、Session方式安全

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

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

     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原理图以下:

      

   四、Application方式

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

   五、Cookie方式

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

   六、Cache方式

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

   七、页面属性

       这里所说的页面属性是指利用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;
        }
View Code

      获取公共变量: 

//发送的页面
  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;//获取公共变量
            }
View Code 

     另外还能够经过如下这种方式获取值:  

//发送的页面
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();
            }
           
        }
View Code

   八、静态变量方式

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

   九、ViewState

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

相关文章
相关标签/搜索