惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 我本无名

asp.net中repeater嵌套CheckBoxList,RadioButtonList来完成投票 javascript中setTimeOut 和setInterval的区别 循环不间断显示滚动图片 解决"当前命令发生了严重错误。应放弃任何可能产生的结果。"的问题 - 我本无名 - 博客园 一个不错的,JavaScript代码,显示首页图片幻灯片效果 一个计算数值并进行排序的SQL语句 asp.net上传图片后,在图片上加入自己的背景字 - 我本无名 - 博客园 解决javascript里的中文信息是乱码的问题 javascript特效,信息滚动效果 关于水晶报表的多表显示 水晶报表的使用(VS2003+CR9) 关于“响应在此上下文中不可用” - 我本无名 中文VS2008中安装ASP.NET MVC框架,不显示模板 关于split中字符串的问题 OnClientClick的妙用! 一条SQL语句 如何进行软件需求分析 软件需求分析规格说明书格式 - 我本无名 (转载)悟透JavaScript - 我本无名
在不同页面之间传递参数
我本无名 · 2008-07-11 · via 博客园 - 我本无名

近来论坛中关于在不同页面之间传递参数的问题很多,在此做一个简单的说明,希望给给朋友们一些帮助,也希望朋友们能开展更多这方面的讨论,欢迎高手们提出自己更好的方法。  

        关于不同页面之间传递参数,一般常规用法是:  
        1、通过URL后带的参数  
这种方法受限制很多,一是将参数暴露出来,容易带来一些安全方面的隐患,二是所带参数如果数量较多,控制起来也很麻烦;  

        2、通过常规表单中的POST提交  
这种方法最常用,但在ASP.NET页面中的FROM控件无法象一般FORM那样将参数传到另一页面,需要通过特定的方式,否则和第一种方式无异。  

        3、Session方式  
传统方式之一,对于特定的环境有利,释放也比较容易  

        4、通过接口或类的方式实现。我们主要讨论一下这个方法。  
基于WEB方式,使用变量传递必须要使用私有变量,因为很简单,如果你使用公有或静态变量,那会出现极大的混乱,朋友们可以考虑一下为什么?  
如果用类的属性,一个问题是对象的生存时间和范围限制我们不能以私有的方式来进行传递。  

        下面是结合一些SDK中的一些方法写的一个例子,供参考:  

说明:为了进行更大数量和类型的参数的传递,也是chequan朋友的问题,考虑使用结构来实现。结构有其好处,合理使用,应该不会造成太大的资源占用,特别是在这种传递上。有想法的朋友也可以一起讨论一下结构的使用。  
例子:  
做一个类文件,为Trancfer.cs,内容如下:

   1using System;    namespace WEBLOG.Class   {      /// < summary>      /// 定义一个结构,需要传递的内容可以由自己来定义,可以定义多个结构,以适合自己的需要       /// </summary>      public struct NormalUserRegInfo      {         public string UserName;          public string UserPassWord;         public string Quesion;         public string Answer;          public string UserEmail;         public string UserClass;      }        /// <summary>      /// 此接口定义了一个返回所需传递对象的属性      /// 发送对象的页面必须实现此接口      /// </summary>       public interface ITransferface      {         TrancferClass TranceferObject {get;set;}      }       /// <summary>      /// Trancfer 的摘要说明。       /// </summary>      public class TrancferClass      {         public TrancferClass ()         {            //            // TOD 在此处添加构造函数逻辑             //         }          private NormalUserRegInfo _strMessage;          public NormalUserRegInfo TranceferMessage         {            get            {               return this._strMessage;            }            set            {               this._strMessage = value;            }         }       }   }   

有了这个类,就可以在页面中进行操作了,  
假设我们有一个页面,名为Set.aspx,通过一个Button将一些参数发到Get.aspx页面中,  
这两个页面的相关代码如下: 

   1====================   Set.aspx.cs   ====================   using System;   using System.Collections;   using System.ComponentModel;   using System.Data;   using System.Drawing;   using System.Web;   using System.Web.SessionState;   using System.Web.UI;   using System.Web.UI.WebControls;   using System.Web.UI.HtmlControls;   using WEBLOG.Class;    namespace WEBLOG   {      /// < summary>      /// Set 的摘要说明。      /// </summary>       public class Set : System.Web.UI.Page,ITransferface      {         protected System.Web.UI.WebControls.Button Button1;          private TrancferClass _temptrancefer;         private void Page_Load (object sender, System.EventArgs e)         {            // 在此处放置用户代码以初始化页面            _temptrancefer = new TrancferClass();         }           #region Web 窗体设计器生成的代码         override protected void OnInit (EventArgs e)         {            //            // CODEGEN: 该调用是  ASP.NET Web 窗体设计器所必需的。            //            InitializeComponent();             base.OnInit(e);         }                  /// <summary>          /// 设计器支持所需的方法 - 不要使用代码编辑器修改         /// 此方法的内容。          /// </summary>         private void InitializeComponent()          {                this.Button1.Click += new System.EventHandler(this.Button1_Click);             this.Load += new System.EventHandler(this.Page_Load);          }          #endregion          //实现ITransferface接口          public TrancferClass TranceferObject         {            get             {               return this._temptrancefer;            }            set             {               this._temptrancefer = value;            }         }           private void Button1_Click (object sender, System.EventArgs e)         {            //定义一个结构,传递这个结构             NormalUserRegInfo temptest = new NormalUserRegInfo();            temptest.Answer ="AAAAAAAAAAAAAAAA";            temptest.Quesion="BBBBBBBBBBBBB";            temptest.UserName ="CCCCCCCCCCCCCCCCC";            temptest.UserPassWord="DDDDDDDDDDDDDDDDDDDDDDDDD";             this.TranceferObject.TranceferMessage = temptest;             // 调用Server.Transfer(),转向执行Get.aspx            Server.Transfer("Get.aspx");          }      }   }    ====================   Get.aspx.cs   =========== =========   using System.Data;   using System.Drawing;   using System.Web;    using System.Web.SessionState;   using System.Web.UI;   using System.Web.UI.WebControls;    using System.Web.UI.HtmlControls;   using WEBLOG.Class;    namespace WEBLOG    {      /// <summary>      /// Receiver 的摘要说明。      /// < /summary>      public class Get : System.Web.UI.Page      {              private void Page_Load (object sender, System.EventArgs e)         {            ITransferface mySender;              if(!IsPostBack)            {               //判断当前页面的 HttpHandler,如果实现了ITransferface接口               //就转换成 ITransferface               if(Context.Handler is ITransferface)                {                  mySender = (ITransferface)Context.Handler;                  NormalUserRegInfo tempreceive  =mySender.TranceferObject.TranceferMessage;                  Response.Write (tempreceive.Answer + "<br>");                  Response.Write(tempreceive.Quesion  + "<br>");                  Response.Write(tempreceive.UserName + "< br>");                  Response.Write(tempreceive.UserPassWord + "< br>");               }               else               {                  Response.Write ("没有接收到任何参数");               }            }         }            #region Web 窗体设计器生成的代码         override protected void OnInit (EventArgs e)         {            //            // CODEGEN: 该调用是  ASP.NET Web 窗体设计器所必需的。            //            InitializeComponent();             base.OnInit(e);         }                  /// <summary>          /// 设计器支持所需的方法 - 不要使用代码编辑器修改         /// 此方法的内容。          /// </summary>         private void InitializeComponent()         {                this.Load += new System.EventHandler(this.Page_Load);          }         #endregion       }   }