webform 页面传值的方法总结

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

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

 

  一、QueryString

  QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。

  这种方法的优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
  这种方法的缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
          2.不能传递对象。

  使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址。
       2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地址中。
       3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。

  例子:(1)a.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ string s_url; s_url = "b.aspx?name=" + Label1.Text; Response.Redirect(s_url); 
}

  (2)b.aspx

private void Page_Load(object sender, EventArgs e) 
{ Label2.Text = Request.QueryString["name"]; 
}

 

  二、Session

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

  优点:1.使用简单,不仅能传递简单数据类型,还能传递对象。
     2.数据量大小是不限制的。

  缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源。

     2.容易丢失。

  使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)";

       2.在目的页面的代码使用Session变量取出传递的值。Result = Session["Nmae"]

  注意:session不用时可以销毁它,销毁的方法是:清除一个:Session.Remove("session名");

                         清除所有:Session.Clear();

  例子:(1)a.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ Session["name"] = Label.Text; 
}

  (2)b.aspx

private void Page_Load(object sender, EventArgs e) 
{ string name; name = Session["name"].ToString(); 
}

 

  三、Cookie

  这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。

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

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

  缺点:1.常常被人认为用来收集用户隐私而遭到批评。

     2.安全性不高,容易伪造。

  

  使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象:

HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
Response.Cookies.Add(cookie); 

      2.在目的页面的代码使用Cookie对象取出传递的值:Result = Request.Cookies[ "myCookie" ].Value;

  例子:(1)a.aspx

private void Button1_Click(object sender, System.EventArgs e)
{HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");Response.Cookies.Add(objCookie); 
}

  (2)b.aspx

string myName1Value;
myName1Value = Request.Cookies[ "myCookie" ].Value;

 

  四、Application

  Application对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。

  可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数。多个请求访问时都可以对它进行操作。

  优点:1.使用简单,消耗较少的服务器资源。

     2.不仅能传递简单数据,还能传递对象。

     3.数据量大小是不限制的。

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

  使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["Nmae"]="Value(Or Object)";

       2.在目的页面的代码使用Application变量取出传递的值。Result = Application["Nmae"]

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

  例子:(1)a.aspx

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

  (2)b.aspx

复制代码
private void Page_Load(object sender, EventArgs e) 
{ string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); 
}
复制代码

 

  五、Server.Transfer

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

  Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

  ps:比较Server.Transfer和Response.Redirect的区别。
    (1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。
    (2)Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。[2]
    (3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则十分灵活,可以跳转到任何URL地址。
    (4)Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。

  优点:1.直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。

     2.可以传递各种数据类型的值和控件的值。

  缺点:1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。

  使用方法:1.在源页面的代码中,使用Page类的Server.Transfer跳到另一个页面传递页面数据:Server.Transfer("b.aspx","false")。

       2.在目的页面中,使用Context.Handler来接收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的属性和方法来获取前一个页面的值,或者直接用Context.Items["myParameter "]

  例子:(1)a.aspx

复制代码
public string Name 
{ get{ return Label1.Text;} 
} 
private void Button1_Click(object sender, System.EventArgs e) 
{ Server.Transfer("b.aspx"); 
}
复制代码

    (2)b.aspx

复制代码
private void Page_Load(object sender, EventArgs e) 
{ a newWeb; //实例a窗体 newWeb = (source)Context.Handler; string name; name = newWeb.Name; 
}
复制代码

 

  以上就是常用的几种页面间传值的方法,我一般使用session和querystring来传值,少数情况会使用到cookie。本篇文章仅仅是介绍这几种方法的使用方法,内部原理没有过多的解释,关于session的存储方式请参见:session的存储方式和配置

  

  参考文章:1、ASP.NET页面之间传递值的几种方式

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





接下来再补充几个。。。。

 

Each button in the demo has the required code in it's Click event handler, and brings you to a separate target page that gets and displays the data that was sent. Here are the methods:

1. Use the querystring:

protected void QueryStringButton_Click(object sender, EventArgs e)
         {
             Response.Redirect("QueryStringPage.aspx?Data=" + Server.UrlEncode(DataToSendTextBox.Text));
        }

2. Use HTTP POST:

<asp:Button ID="HttpPostButton" runat="server" Text="Use HttpPost"
             PostBackUrl="~/HttpPostPage.aspx" οnclick="HttpPostButton_Click"/>

protected void HttpPostButton_Click(object sender, EventArgs e)
        {
     // The PostBackUrl property of the Button takes care of where to send it!
        }

  3. Use Session State:

   protected void SessionStateButton_Click(object sender, EventArgs e)
         {
             Session["Data"] = DataToSendTextBox.Text;
             Response.Redirect("SessionStatePage.aspx");
        }

  4.  Use public properties:

   public string DataToSend
        {
            get
            {
                 return DataToSendTextBox.Text;
             }
        }

        protected void PublicPropertiesButton_Click(object sender, EventArgs e)
         {
             Server.Transfer("PublicPropertiesPage.aspx");
        }

5. Use PreviousPage Control Info:

protected void ControlInfoButton_Click(object sender, EventArgs e)
         {
             Server.Transfer("ControlInfoPage.aspx");
        }

  // target page:
protected void Page_Load(object sender, EventArgs e)
        {
            var textbox = PreviousPage.FindControl("DataToSendTextbox") as TextBox;
             if (textbox != null)
            {
                DataReceivedLabel.Text = textbox.Text;
            }
        }

6. Use HttpContext Items Collection:

  protected void HttpContextButton_Click(object sender, EventArgs e)
         {
             HttpContext.Current.Items["data"] = DataToSendTextBox.Text;
             Server.Transfer("HttpContextItemsPage.aspx");
        }

// target page:
protected void Page_Load(object sender, EventArgs e)
         {
             this.DataReceivedLabel.Text =(String) HttpContext.Current.Items["data"];
        }

7. Use Cookies:

protected void CookiesButton_Click(object sender, EventArgs e)
        {
            HttpCookie cook =  new HttpCookie("data");
            cook.Expires = DateTime.Now.AddDays(1);
            cook.Value = DataToSendTextBox.Text;
             Response.Cookies.Add(cook);
             Response.Redirect("HttpCookiePage.aspx");
        }

// target page:
protected void Page_Load(object sender, EventArgs e)
        {
            DataReceivedLabel.Text = Request.Cookies["data"].Value;
        }

8. Use Cache:

protected void CacheButton_Click(object sender, EventArgs e)
         {
             Cache["data"] = DataToSendTextBox.Text;
             Server.Transfer("CachePage.aspx");
        }
   // target page:
    protected void Page_Load(object sender, EventArgs e)
         {
             this.DataReceivedLabel.Text = (string) Cache["data"];
        }

Actually, there are a number of other methods. You can use a database, a Data Store such as Redis or BPlusTree, file storage, or even the Appdomain Cache. But as these are not as common, we'll leave those as an exercise for the reader. I should mention that the use of Cache and Application (not shown) are not user - specific, but they can easily be made so by prepending the key used with something unique to the user such as their SessionId. 

You can download the complete Visual Studio 2010 demo solution here.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iNeuOS工业互联网操作系统,智慧用电测控应用案例

目 录1. 概述... 22. 系统部署结构... 23. 用电测控终端... 34. 系统应用介绍... 61. 概述通过物联网技术对引发电气火灾的主要因素(导线温度、电流和漏电流等)进行不间断的数据跟踪与统计分析&#xff0c;实时发现电气线路和用电设备存在的安全隐…

出现了!豆瓣最高9.9分,2020年最值得看的美剧!你居然还没看过?【内附资源】...

全世界只有3.14 % 的人关注了爆炸吧知识在调性普遍黄暴烧脑的美剧大流中&#xff0c;《This is us》没有大牌主演&#xff0c;没有炫酷特效&#xff0c;却让观众集体沦陷&#xff0c;被称为5年难得一见的美剧。有人说&#xff0c;这是「有生之年看过的最温柔的美剧」。但它取得…

C# 修改配置文件进行窗体logo切换

01—前言&#xff1a;题外的话大家可能发现这个号现在原创越来越少了&#xff0c;其实小编并没有放弃持续更新&#xff0c;只是把一手原创放到了 【dotnet编程大全】这个号了&#xff0c;那个号目前原创主要更新的是wpf mvvm方面的知识&#xff0c;框架用的Caliburn.Micro&…

数学有趣地超乎你的想象

全世界只有3.14 % 的人关注了爆炸吧知识说起数学你是拒绝还是喜欢看完这一组&#xff0c;对于数学他的震撼、霸气、美来感受下哇1三角形内角和为1802多边形外角和为360&#xff08;图来源于可乐学习&#xff09;3怎样将一个正三角形剪拼成正方形&#xff1f;4怎样把两正方形剪拼…

使用C#像google/zx一样编写脚本

google/zxzx是谷歌开源的一个能够帮助开发者快速编写脚本的工具&#xff0c;它使用JavaScript作为编程语言。示例脚本如下&#xff1a;#!/usr/bin/env zxawait $cat package.json | grep namelet branch await $git branch --show-current await $dep deploy --branch${branch…

redis 查询缓存_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

在实际的工作项目中&#xff0c; 缓存成为高并发、高性能架构的关键组件 &#xff0c;那么Redis为什么可以作为缓存使用呢&#xff1f;首先可以作为缓存的两个主要特征&#xff1a;在分层系统中处于内存/CPU具有访问性能良好&#xff0c;缓存数据饱和&#xff0c;有良好的数据淘…

5部适合学英语的动画电影,快和孩子一起看!

全世界只有3.14 % 的人关注了爆炸吧知识今天我们与大家分享5部非常适合小学生学习英语的动画电影&#xff0c;家长们可依据不同类别和主题为孩子挑选喜欢的影片&#xff0c;在家陪孩子一起观看。文末可免费领取哦~01 《丁丁历险记》讲述的是一天丁丁买了一只古老的船模送给船长…

OC面向对象—封装

OC面向对象—封装 一、面向对象和封装 面向对象的三大特性&#xff1a;封装&#xff08;成员变量&#xff09;、继承和多态 在OC语言中&#xff0c;使用interface和implementation来处理类。 interface就好像暴露在外面的时钟表面&#xff0c;像外界提供展示以及接口。implemen…

10张让你大脑崩溃的图,敢接受挑战吗?

全世界只有3.14 % 的人关注了爆炸吧知识快睡了吧&#xff1f;来做一组视觉游戏~一些人热爱挑战各种错觉&#xff0c;如果你也是这类型图片的粉丝&#xff0c;这10张图片会让你非常过瘾&#xff01;入门篇【挑战一】在这张图片中&#xff0c;你能看到几个红球&#xff1f;5个&am…

Source Generator 单元测试

Source Generator 单元测试IntroSource Generator 是 .NET 5.0 以后引入的一个在编译期间动态生成代码的一个机制&#xff0c;介绍可以参考 C# 强大的新特性 Source GeneratorGetStarted使用起来还算比较简单的&#xff0c;我平时一般用 xunit&#xff0c;所以下面的示例也是使…

又一个中国男人荣获巨奖!拿奖拿的手软,却坦言“我对诺奖没有兴趣”...

全世界只有3.14 % 的人关注了爆炸吧知识获得诺奖似乎只是时间问题2020年9月10日&#xff0c;2021年科学突破奖&#xff08; BREAKTHROUGH PRIZES&#xff09;正式公布。来自中国香港的科学家卢煜明获得了生命科学科学突破奖&#xff0c;华人数学家孙崧获得了数学新视野奖。前几…

ffbe攻略站_最终幻想勇气启示录ffbe兵员强化攻略

最终幻想勇气启示录兵员如何强化&#xff1f;兵员强化后有哪些加强&#xff1f;来看看9k9k小编带来的最终幻想勇气启示录ffbe兵员强化攻略。在兵员选栏中&#xff0c;我们可以看到有强化兵员这一选项&#xff0c;在这里面&#xff0c;我们可以选择兵员进行强化&#xff0c;强化…

不止命令行!自定义VS生成事件

前言在VS中打开项目属性&#xff0c;选择“生成事件”选项卡。在“生成前事件命令行”或“生成后事件命令行”文本框中可以输入任何命令提示符或.bat文件中有效的命令&#xff1a;但是&#xff0c;有没有可能执行更丰富的命令呢&#xff1f;生成事件的本质上面设置的“生成事件…

如果你女朋友不让你看她卸妆......

1 如果你女朋友不让你看她卸妆▼2 扫地机器人的正确用法&#xff08;图源网络&#xff0c;侵删&#xff09;▼3 来比个心&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 精彩攻防战▼5 那些吃辣条的小学生长大了...▼6 人生的道路上有时候也要回头看看▼7 先礼…

[9月29日的脚本] 枚举SharePoint列表(PowerShell)

脚本下载: SPListEnumerator.zip http://gallery.technet.microsoft.com/scriptcenter/SPListEnumerator-PowerShell-b0ce0b9f 本脚本通过一个“大型”列表或者是文档库来枚举并为相关项提供信息。 在SharePoint&#xff08;2007版和2010版&#xff09;中&#xff0c;我们有一个…

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务https://procodeguide.com/programming/polly-in-aspnet-core/在本文中&#xff0c;我们将了解如何在微服务中实现弹性容错&#xff0c;即在 ASP.NET Core 中使用 Polly 构建弹性微服务&#xff08;Web API&#xff0…

Android开发者指南(29) —— USB Host and Accessory

前言 本章内容为Android开发者指南的 USB章节&#xff0c;译为"USB主从设备"&#xff0c;版本为Android 4.0 r1&#xff0c;翻译来自&#xff1a;"太阳火神的美丽人生"&#xff0c;欢迎访问他的博客&#xff1a;"http://alot.sinaapp.com"&#…

知乎超高赞:都有哪些习惯值得长期坚持?

全世界只有3.14 % 的人关注了爆炸吧知识知乎上有个高赞问题&#xff1a;有哪些值得长期坚持下去就能改变人生的好习惯&#xff1f;其中最高频的回答是读书。随着经历和阅历的增加&#xff0c;越来越多的人清醒的认识到&#xff1a;读书不再是学生时代的事&#xff0c;而是一生的…

mysql 免费前端_MySQL

MySQL这是一个关系型数据库&#xff0c;存在表的概念。结构数据库可以存放多张表&#xff0c;每个表可以存放多个字段&#xff0c;每个字段可以存放多个记录。DOS命令操作数据库PHPstudy使用终端打开数据库第一步&#xff1a;设置-->MySQL工具-->MySQL命令行&#xff1b;…

惊了!日本街头出现透明公厕,竟有人排队抢着上!

全世界只有3.14 % 的人关注了爆炸吧知识最近在日本一个公园内&#xff0c;一间透明的厕所火了&#xff01;厕所为什么是透明的&#xff1f;如何保证私密性&#xff1f;还是一个装置艺术&#xff0c;在哗众取宠&#xff1f;相信你跟我有一样的疑问。其实啊&#xff0c;这是日本财…