zoukankan      html  css  js  c++  java
  • 在ASP.NET页面间传递任意数据的方法与实例

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

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

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

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

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

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

    说明:为了进行更大数量和类型的参数的传递,也是chequan朋友的问题,考虑使用结构来实现。结构有其好处,合理使用,应该不会造成太大的资源占用,特别是在这种传递上。有想法的朋友也可以一起讨论一下结构的使用。
    例子:
    做一个类文件,为Trancfer.cs,内容如下:
    using 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()
         {
            //
            // TODO: 在此处添加构造函数逻辑
            //
         }

         private NormalUserRegInfo _strMessage;

         public NormalUserRegInfo TranceferMessage
         {
            get
            {
               return this._strMessage;
            }
            set
            {
               this._strMessage = value;
            }
         }

      }
    }

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

      }
    }

  • 相关阅读:
    谷歌浏览器禁用缓存
    web项目中各种路径的获取
    visual studio 2015常用快捷键
    Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值
    JQuery获取浏览器窗口的可视区域高度和宽度,滚动条高度
    OAuth学习总结
    今日技术碎片
    碎片化的一天
    软件架构简史
    竞态条件概念
  • 原文地址:https://www.cnblogs.com/wxmxiaoming/p/262321.html
Copyright © 2011-2022 走看看