zoukankan      html  css  js  c++  java
  • .net C#中页面之间传值传参的六种方法

    private void Button1_Click(object sender, System.EventArgs e)
     {
         string s_url;
         s_url = "b.aspx?name=" + Label1.Text;
         Response.Redirect(s_url);
     }
    b.aspx中C#代码
    private void Page_Load(object sender, EventArgs e)
     {
         Label2.Text = Request.QueryString["name"];
     }
    复制代码

    query传值又分类post ,get格式如:

    复制代码
    //post请求 
    string name = Request["name"].toString(); 
    string name =Request.Form.Get("name").toString(); 
    //get请求 
    string name = Request.QueryString["name"].toString(); 
    但我发现 无论是否是post与get传值都可用
    string name = Request["name"].toString();
    复制代码

    表单提交中get和post方式的区别归纳如下几点: 
    1. get是从服务器上获取数据,post是向服务器传送数据。 
    2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 
    3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 
    4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 
    5. get安全性非常低,post安全性较高。

    2.  使用Application 对象变量

      Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。

    复制代码
    a.aspx的C#代码
    private void Button1_Click(object sender, System.EventArgs e)
     {
         Application["name"] = Label1.Text;
         Server.Transfer("b.aspx");
     }
    b.aspx中C#代码
    private void Page_Load(object sender, EventArgs e)
     {
         string name;
         Application.Lock();
         name = Application["name"].ToString();
         Application.UnLock();
     }
    复制代码

    3.  使用Session变量

      想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。

    复制代码
    a.aspx的C#代码
    private void Button1_Click(object sender, System.EventArgs e)
     {
         Session["name"] = Label.Text;
     }
    b.aspx中C#代码
    private void Page_Load(object sender, EventArgs e)
     {
         string name;
         name = Session["name"].ToString();
     }
    复制代码

    4.  使用Cookie对象变量

      这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

    复制代码
    a.aspx的C#代码
    private void Button1_Click(object sender, System.EventArgs e)
     {
         HttpCookie cookie_name = new HttpCookie("name");
         cookie_name.Value = Label1.Text;
         Reponse.AppendCookie(cookie_name);
         Server.Transfer("b.aspx");
     }
    b.aspx中C#代码
    private void Page_Load(object sender, EventArgs e)
     {
         string name;
         name = Request.Cookie["name"].Value.ToString();
     }
    复制代码

    5.  使用Server.Transfer方法

      这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。

    复制代码
    a.aspx的C#代码
    public string Name
     {
         get{ return Label1.Text;}
     }
     private void Button1_Click(object sender, System.EventArgs e)
     {
         Server.Transfer("b.aspx");
     }
    b.aspx中C#代码
    private void Page_Load(object sender, EventArgs e)
     {
         a newWeb;   //实例a窗体
         newWeb = (source)Context.Handler;
         string name;
         name = newWeb.Name;
     }
    复制代码

    下面介绍一下传值缺点和优点

    cookie
         方式:将数据存在客户端的经典方法。
         缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每个容量4096字节。

    Session
         方式:将用户数据存储在服务端。
         特点:asp.net中可以设置session的存储方式、位置、SessionID的保存是否依赖cookie。
                 可以直接存储对象。 
         缺点:asp.net中有失效的隐患
    Cache
         方式:将用户数据存储在服务端数据缓存中。 
         特点:可以大大提高效率。 可以直接存储对象。
    Appliction
         方式: 将数据存储于此,相当于全局变量。 
         特点:可以直接存储对象。整个站点的共享数据
    ViewState
         方式:asp.net特有机制,用来恢复页面状态。 
         特点:将页面各控件及其所存数据序列化存在name为_ViewState的隐藏域中。
         缺点:存在HTML中,安全性较低。可以设置加密和验证,但数据量会大增、效率有影响。
    Static
         方式: 将数据存于静态变量中。 
         特点:利于提高效率。
         缺点:若用不好会致使用户或页面间数据紊乱,造成极大的隐患。建议只赋值一次,绝对禁止为单个用户而更改此值。

  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/allenzhang/p/5753294.html
Copyright © 2011-2022 走看看