ASP.NET跨页面传值技巧总结

ASP.NET页面传值方式
方式1:
  
在接收页 的html代码里加上一行:

<%@ Reference Page  = "WebForm1.aspx" %>           
    
    WebForm1  fp=(WebForm1)Context.Handler;
    this.TextBox1.Text=fp.name;   //name  是第一页的public变量




Context 提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。

方式2:GET方式
    在发送页
     

public int sum=0;
int i  =int.Parse(this.TextBox1.Text)*2;
 Server.Transfer("WebForm2.aspx?sum="+i);



    接收页
     

this.TextBox1.Text=Request["sum"].ToString();
or  this.TextBox1.Text=Request.Params["sum"].ToString();
 this.TextBox1.Text=Request.QueryString["sum"];




方法3:全局变量

   发送页:
      

Application["sum"]=this.TextBox1.Text;
Server.Transfer("WebForm2.aspx");



   接收页:
     

this.TextBox1.Text=(string)Application["sum"];



Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择



方法4:

发送页:
    1.定义静态变量: public static string str="";
    2. str=this.TextBox1.Text;
       Server.Transfer("webform2.aspx");
接收页:
    1.引入第一页的命名空间:using WebApplication1;
    2 this.TextBox1.Text=WebForm1.str;

另外几种最常见的传值

ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过 POST方法很容易的把一个值或多个值从一个页面传送到另一个页面(request()/request.form() /request.querystring()),用同样的方法在ASP.NET中实现有点麻烦。在这里,通过其他方式来解决这种情形。

 

1.使用QueryString变量

 

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

a.aspx.csC#代码

1. private void Button1_Click(object sender, System.EventArgs e)  
2. {  
3. string s_url;   
4. s_url = "b.aspx?name=" + Label1.Text;  
5. Response.Redirect(s_url);     
6. }  
7. private void Button1_Click(object sender, System.EventArgs e)   
8. {   
9. string s_url;    
10. s_url = "b.aspx?name=" + Label1.Text;   
11. Response.Redirect(s_url);   
12. }

 

b.aspx.cs中C#代码

1. private void Page_Load(object sender, EventArgs e)  
2. {     
3. Label2.Text = Request.QueryString["name"];  
4. }  
5. private void Page_Load(object sender, EventArgs e)   
6. {   
7. Label2.Text = Request.QueryString["name"];   
8. }

 

 

2.使用Application 对象变量

Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。

a.aspx.csC#代码

1. private void Button1_Click(object sender, System.EventArgs e)  
2. {    
3. Application["name"] = Label1.Text;  
4. Server.Transfer("b.aspx");     
5. }  
6. private void Button1_Click(object sender, System.EventArgs e)   
7. {   
8. Application["name"] = Label1.Text;   
9. Server.Transfer("b.aspx");    
10. }

b.aspx.csC#代码

1. private void Page_Load(object sender, EventArgs e)  
2. {  
3. string name;   
4. Application.Lock();  
5. name = Application["name"].ToString();   
6. Application.UnLock();   
7. }  
8. private void Page_Load(object sender, EventArgs e)   
9. {   
10. string name;    
11. Application.Lock();   
12. name = Application["name"].ToString();   
13. Application.UnLock();   
14. }

 

 

3.使用Session变量

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

a.aspx.csC#代码

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

    b.aspx.cs中C#代码

    1. private void Page_Load(object sender, EventArgs e)  
    2. {    
    3. string name;  
    4. name = Session["name"].ToString();    
    5. }  
    6. private void Page_Load(object sender, EventArgs e)   
    7. {   
    8. string name;    
    9. name = Session["name"].ToString();   
    10. }

     

    4.使用Cookie对象变量

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

    a.aspx.csC#代码

    1. private void Button1_Click(object sender, System.EventArgs e)  
    2. {     
    3. HttpCookie cookie_name = new HttpCookie("name");  
    4. cookie_name.Value = Label1.Text;    
    5. Reponse.AppendCookie(cookie_name);   
    6. Server.Transfer("b.aspx");    
    7. }  
    8. private void Button1_Click(object sender, System.EventArgs e)   
    9. {   
    10. HttpCookie cookie_name = new HttpCookie("name");   
    11. cookie_name.Value = Label1.Text;   
    12. Reponse.AppendCookie(cookie_name);   
    13. Server.Transfer("b.aspx");    
    14. }

     

    b.aspx.cs中C#代码

    1. private void Page_Load(object sender, EventArgs e)  
    2. {    
    3. string name;  
    4. name = Request.Cookie["name"].Value.ToString();    
    5. }   
    6. private void Page_Load(object sender, EventArgs e)   
    7. {     
    8. string name;    
    9. name = Request.Cookie["name"].Value.ToString();     
    10. }

     

    5.使用Server.Transfer方法

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

    a.aspx.csC#代码

    1. public string Name  
    2. {    
    3. get{ return Label1.Text;}  
    4. }     
    5. private void Button1_Click(object sender, System.EventArgs e)  
    6. {     
    7. Server.Transfer("b.aspx");  
    8. }  
    9. public string Name   
    10. {   
    11. get{ return Label1.Text;}   
    12. }   
    13. private void Button1_Click(object sender, System.EventArgs e)   
    14. {   
    15. Server.Transfer("b.aspx");   
    16. }

     

    b.aspx.csC#代码

    1. private void Page_Load(object sender, EventArgs e)  
    2. {    
    3. a newWeb;   //实例a窗体,如果b.aspx页面中没有引用a.aspx页面的话,这里会提示缺少引用,但不影响编译和执行   
    4. newWeb = (source)Context.Handler;     
    5. string name;  
    6. name = newWeb.Name;    
    7. }