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.cs的C#代码
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.cs的C#代码
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.cs中C#代码
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.cs的C#代码
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.cs的C#代码
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.cs的C#代码
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.cs中C#代码
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. }