跨页传值方法集锦

1.  使用QueryString变量

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

  a.ASPx的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"];
}

  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;
}

 


6.另外一个方法就是在源表单页已经确定的情况下,使用@PreviousPageType指令。这个指令可以在目标表单页中以强类型的方式访问源表单页。这个指令指定源表单页使用VirtualPath属性还是TypeName属性。PreviousPage属性返回一个强类型的结果来对源表单页进行引用。其允许访问源目标页的公共属性。

SourcePage.aspx:

<form runat="server" >

...

<asp:textbox runat="server" id="txtFirstName"/>

<asp:textbox runat="server" id="txtLastName"/>

<asp:button runat="server" id="btnViewReport" Text="View Report" PostbackURL="~/targetpage.aspx" />

...

public string FirstName

{

    get { return txtFirstName.Text; }

}

...

TargetPage.aspx

<%@ PreviousPageType VirtualPath="sourcepage.aspx" %>

string strFirstName;

strFirstName = PreviousPage.FirstName
//Strongly Typed PreviousPage allows direct access to the public properties of the source page.

 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

7.

source.cs

public string Name
  ......{
   get
   ......{
    return txtName.Text;
   }
  }
  public string Pwd
  ......{
   get
   ......{
    return txtPwd.Text;
   }
  }
 
private void btnCommit_Click(object sender, System.EventArgs e)
  ......{
   //1.使用QueryString方式传值
   //QueryString是一种非常简单的传值方式,它可以将传送的值显示在浏览器的地址栏中,
   //如果想要传递一个安全性不太重要或一个结构简单的数值时,用此法最容易。但如果要
   //传递的信息涉及安全性或值的类型是较为复杂的array(数组)或object(对象)时,
   //就不能和此方法。
   //实现:
   string url;
   url = "distination.aspx Name=" + txtName.Text + "&Pwd=" + txtPwd.Text;
   Response.Redirect(url);
   //2.使用Application对象变量
   //Application对象在服务器端生成一个状态变量来存储所需的信息,该Application对象
   //变量的可视范围涵盖全部使用者,也就是只要正在使用这个网页程序的程序都可以存取
   //这个状态变量。这就意味着它只能存储一些要公布的信息,而对于那些涉及个人及安全
   //的信息就不能用它来存取。Application对象变量有2个常用的方法,Lock和UnLock方法,
   //主要用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁
   //定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock
   //方法则解除对Application对象变量的锁定。
   //例如聊天室的制作,也可以用Static对象变量来代替。
   //实现:
   Application["Name"] = txtName.Text;
   Application["Pwd"] = txtPwd.Text;
   Server.Transfer("distination.aspx");
   //3.使用Session对象变量
   //Session对象变量和Application对象变量一样,都是用来存储跨网页程序的变量或是对象。
   //但与Application对象变量不同的是,Session对象变量只针对单一网页使用者,各个连接的
   //机器有各自的Session对象变量,不同的客户端无法相互存取。在Session变量使用过程中,
   //当用户在应用程序中从一页移动到另一页时,存储在Session对象中的变量不会被放弃,只有
   //当用户关掉浏览器或超过设定Session对象变量的有效时间时,Session变量才会消失。因此,
   //Session对象变量若存储过多的数据则会消耗大量的服务器资源,在使用时尤其要注意控制数量。
   //当然也可以利用Session对象的方法,如获至宝Remove、Clear来及时清理,以降低资源的消耗。
   //实现:
   Session["Name"] = txtName.Text;
   Session["Pwd"] = txtPwd.Text;
   Server.Transfer("distination.aspx");
   //4.使用Cookie对象变量
   //Session对象变量和Application对象变量都是在服务器端产生的,与此不同,Cookie变量的数据
   //是以文件形式放于客户端文件系统或客户端浏览器会话内的内存中,只含少量信息,并且可以永
   //久存在或终止于所设定的时间,使用时配合ASP.NET的内置对象ResPonse和Request完成传值。另
   //外,Cookie是与Web站点而不是具体页面关联的,不论用户请示浏览器站点中的哪个页面,浏览器
   //和服务器都将交换Cookie信息。由于Cookie对象变量在客户端存取,不可避免地带来存取权限及
   //安全性问题,对于用户而言,要慎用。
   //实现:
   HttpCookie Name = new HttpCookie("Name");
   HttpCookie Pwd = new HttpCookie("Pwd");
   Name.Value = txtName.Text;
   Pwd.Value = txtPwd.Text;
   Response.AppendCookie(Name);
   Response.AppendCookie(Pwd);
   Server.Transfer("distination.aspx");
   //5.使用server.Transfer方法
   //server.Transfer把执行流程从当前的aspx页面转到同一服务器的另一个aspx页面,新的aspx页面
   //仍然使用前一aspx页面创建的应答流,可以通过对象属性的方式来存取信息。使用该方法进行值传
   //递需要额外创建一些属性以便在另一页面访问它,这种方法是面向对象的,简洁而有效。
   //实现:
   //在属性申明区写上相应的属性
   Server.Transfer("distination.aspx");
  }

 

 distination.cs

private void Page_Load(object sender, System.EventArgs e)
  ......{
   if(!IsPostBack)
   ......{
    //1.使用QueryString方式接值
    if(Request.QueryString["Name"]!=null || Request.QueryString["Name"].Trim()=="")
    ......{
     Response.Write("您的姓名为:" + Request.QueryString["Name"] + "<br>" + "您丢失的密码为:" + Request.QueryString["Pwd"]);
    }
    //2.使用Application对象变量
    Application.Lock();
    Response.Write("您的姓名为:" + Application["Name"].ToString() + "<br>" + "您丢失的密码为:" + Application["Pwd"].ToString());
    Application.UnLock();
    //3.使用Session对象变量
    Response.Write("您的姓名为:" + Session["Name"].ToString() + "<br>" + "您丢失的密码为:" + Session["Pwd"].ToString());
    Session.Remove("Name");
    //或者用Clear方法
    Session.Remove("Pwd");
    //4.使用Cookie对象变量
    Response.Write("您的姓名为:" + Request.Cookies["Name"].Value.ToString() + "<br>" + "您丢失的密码为:" + Request.Cookies["Pwd"].Value.ToString());
   
    //5.使用server.Transfer方法
    source sc;
    sc = (source)Context.Handler;
    //Context.Handler属性用来获得对页面实例对象的引用
    Response.Write("您的姓名为:" + sc.Name + "<br>" + "您丢失的密码为:" + sc.Pwd);
   }
}

 

posted @ 2008-04-19 12:23  pomp  阅读(1485)  评论(1编辑  收藏  举报