列举Asp.Net页面之间传递值得几种方式

页面传值是我们经常遇到的问题,这个各种页面传值的方式。
一、Request.Form:
获取以POST方式提交的数据(接收Form提交来的数据);
使用方法:

                 /// <summary>
                /// 获取以POST方式提交的数据(接收Form提交来的数据)
                /// </summary>
                /// <returns></returns>
                [HttpPost]
                public ActionResult Hellos() {
                    string fname=Request.Form["fname"];
                    string lname = Request.Form["lname"];
                    @ViewBag.fname = fname;
                    @ViewBag.lname = lname;
                    return View();
                }

在这里插入图片描述

二、QueryString:
获取地址栏参数(以GET方式提交的数据)
传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。
优点:使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
2.不能传递对象。
使用方法:

              [HttpGet]
            public string Welcome() {
    
                string name = Request.QueryString["name"];
    
                return HttpUtility.HtmlEncode("hello:"+name);
            }

在这里插入图片描述
三、Request.Params:
Request.Form和Request.QueryString包含两种方式(优先获取GET方式提交的数据),它会在QueryString、Form、ServerVariable中都按先后顺序搜寻一遍。
使用方法:

         /// <summary>
        /// Request:Request.Form和Request.QueryString包含两种方式(优先获取GET方式提交的数据),它会在QueryString、Form、       ServerVariable中都按先后顺序搜寻一遍。
        /// </summary>
        /// <returns></returns>
        public ActionResult Welcome() {
            string fname = Request.Params["fname"];
            string lname = Request.Params["lname"];
            ViewBag.fname = fname;
            ViewBag.lname = lname;
            return View();
        }

在这里插入图片描述
四、 Request.Cookies:
检索Cookies 集合中的值,Cookies 集合同意用户检索在 HTTP 请求中发送的 cookie 的值。
Request.Cookies使用语法:Request.Cookies(cookie)[(key)|.attribute]
參数说明:
(1)CookieName:代表表示Cookie的名字,由用户自行命名。
(2)Key:是Cookie指定keyword。通过给Cookie指定keyword,可使Cookie拥有多个值。这样的Cookie称为带索引的Cookie。
(3)Attribute:此參数表示Cookies集合对象的属性,其最经常使用的属性主要是Expires(用于设置Cookies的过期日期)、Domain(用于设置Cookies的有效作用域名范围)。
使用方法:

             /// <summary>
            /// Request.Cookies方法能够检索Cookies 集合中的值,Cookies 集合同意用户检索在 HTTP 请求中发送的 cookie 的值。
            /// </summary>
            /// <returns></returns>
            [HttpPost]
            public ActionResult Hello()
            {
                string fname=Request.Cookies["fname"].ToString();
                string lname = Request.Cookies["lname"].ToString();
                @ViewBag.fname = fname;
                @ViewBag.lname = lname;
                return View();
            }

在这里插入图片描述
五.Session:
Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。
Session对象在.NET中对应HttpSessionState类,表示“会话状态”,可以保存与当前用户会话相关的信息。
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息。用户在应用程序的页面切换时,Session对象的变量不会被清除。

(1).在web.config中配置Session

      <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"
    
      />

在这里插入图片描述
(2).Session具有以下特点:
优点
●.Session中的数据保存在服务器端;
●.Session中可以保存任意类型的数据;
●.Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。
●.Session是安全的、透明的。
缺点:
● 因为Session是保存在服务端的内存中的,随着客户端请求的增多,很有可能影响到性能。

● 在Web.conig中,sessionState节点的mode属性,如果设置为"StateServer"或"SQLServer",就必须为存储到Session中的对象打上[Serializable]。这样在存储、读取Session的时候,不断地序列化和反序列化,也会影响到性能。
使用方法:

         /// <summary>
        /// Session用于存储特定的用户会话所需的信息。在ASP.NET中代表了服务器与客户端之间的“会话”
        /// </summary>
        /// <returns></returns>
        public ActionResult PostSession() {
            Session["lname"] = "编程";  //注:Session的值为"编程",Session的类型是object所以可以赋任何类型。
            Session["fname"] = "男孩";
            string fname = Session["lname"].ToString();   //读取
            string lname = Session["lname"].ToString();
            Session.Timeout = 20;   //默认的时间为30,手动设置为20分钟
            return View();
        }

        [HttpPost]
        public ActionResult ClearSession() {
            Session["lname"] = null;
            Session.Remove("lname");   //清除某一个session
            Session["fname"] = null;
            Session.Remove("fname");
            Session.Clear(); //清除session中的缓存数据(不管缓存与数据库的同步)
            Session.Abandon();  //清除所有Session
            return Content("Session已经被清空");
        }

在这里插入图片描述
在这里插入图片描述
六.Application:
Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据。由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。
特点:
●. 存储的物理位置。服务器内存。

●. 存储的类型限制。任意类型。

●. 状态使用的范围。整个应用程序。

●.存储的大小限制。任意大小。

●. 生命周期。应用程序开始的时候创建(准确来说是用户第一次请求某URL的时候创建),应用程序结束的时候销毁。

●.安全与性能。数据总是存储在服务端,安全性比较高,但不易存储过多数据。

●. 优缺点与注意事项。检索数据速度快,但缺乏自我管理机制,数据不会自动释放。
使用方法:

   /// <summary>
        /// Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据。
        /// 由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。
        /// </summary>
        /// <returns></returns>
        public ActionResult Getapplication() {
            System.Web.HttpContext.Current.Application["lname"] = "热爱编程的男孩子";  //存值
            System.Web.HttpContext.Current.Application["fname"] = "爱编程的男孩子";
            string lname = System.Web.HttpContext.Current.Application["lname"].ToString();  //取值
            string fname = System.Web.HttpContext.Current.Application["fname"].ToString();
            return View();
        }

在这里插入图片描述
七:ViewBag
特性:
●. ViewBag是一个动态类型变量(dynamic),这是C# 4.0引入的新特性,变量类型会在运行时进行解析。
●. ViewBag基本上是ViewData的包装,也是用来从Controller向View来传递值的。
●. ViewBag也只在当前的请求中有效。
●. 在重定向(redirection)后,ViewBag中存储的变量值将变为null
●. 因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。

control:

        /// <summary>
        ///ViewBag是 dynamic 动态类型。它会在程序执行的时候动态解析。
        /// </summary>
        /// <returns></returns>
        public ActionResult GetViewBag() {
            ViewBag.name = "ViewBag";
            ViewBag.age = 8;
            string[] Items = new string[] {"中国","美国", "英国" };
            ViewBag.itemsA = Items;
            return View();
        }

View:

@{
    ViewBag.Title = "GetViewBag";
}

<h2>GetViewBag</h2>

<p>name:@ViewBag.name</p>
<p>Age:@ViewBag.age</p>
<p>ViewBagUserCountry:</p>
@foreach (var items in ViewBag.ItemsA)
{
    <p>@items</p>
}

在这里插入图片描述
ViewBag更适合从Controller向View传递复杂对象数据时使用, 因为取出存储在其中的数据变量时无需进行类型转换。

八:ViewData
●.ViewData是一个继承自ViewDataDictionary类的Dictionary对象。
●.ViewData用来从Controller向对应的View传递值。
●.ViewData的只在当前当前的请求中有效,生命周期和View相同,其值不能在多个请求中共享。
●.在重定向(redirection)后,ViewData中存储的变量值将变为null。
●.在取出ViewData中的变量值是,必须进行合适的类型转换(隐式或显式)和空值检查。

control:

 public ActionResult GetViewData() {
            ViewData["name"] = "ViewData";
            ViewData["Age"] = 20;
            Dictionary<string, string> country = new Dictionary<string, string>();
            country.Add("china","中国");
            country.Add("America", "美国");
            country.Add("Japan","日本");
            ViewData["country"] = country;
            return View();
        }

View:


@{
    ViewBag.Title = "GetViewData";
}

<h2>GetViewData</h2>

<p>name:@ViewData["name"]</p>
<p>Age:@ViewData["Age"]</p>
@{ 

    foreach (var item in ViewData["Country"] as Dictionary<string,string>)
    {
     <p>country: @item.Key;</p>
    }
}


在这里插入图片描述
我在从ViewData中取出变量name时并没有对其进行类型转换,那时因为我们存储的是一个简单类型的变量值。如何取出复杂的数据,必须进行类型转换。

综上, ViewData更适合从Controller向View传递简单对象数据时使用。

ViewBag和ViewData区别:
●.ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData[“myName”]
●.ViewData比ViewBag快,ViewBag比ViewData慢。
●.ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData

在这里插入图片描述
九:TempDate
特性:
●.TempData是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的。(备注:你也可以让你的TempData基于其他存储机制之上, 我们可以提供我们自定义的ITempDataProvider来完成,具体可以参见:
Session-less Controllers and TempData in ASP.NET MVC)
●.TempData是用来在多个Actions或从当前请求向子请求, 页面发生了重定向(Redirection)时传递共享数据。
●.只有在目标视图(View)完全加载后才有效。
●.在取出TempData存储的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。

control:

  /// <summary>
    ///DataDictionary的一个实体,保存在Session中,也是以键值对的结构存在。
    /// </summary>
    /// <returns></returns>
    public ActionResult GetTempData() {
        this.TempData["name"] = "Tempdata";
        this.TempData["age"] = "20";
        Dictionary<string, string> country = new Dictionary<string, string>();
        country.Add("china", "中国");
        country.Add("America", "美国");
        country.Add("Japan", "日本");
        this.TempData["Country"] = country;
        return View();
    }

View:

@{
    ViewBag.Title = "GetTempData";
}

<h2>GetTempData</h2>
<p>@TempData["name"]</p>
<p>@TempData["age"]</p>
@{
    foreach (var item in TempData["country"] as Dictionary<string,string>)
    {
        <p>@item.Key</p>
    }

 }

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值