很多时候我们都需要用到页面之间的值的传递,session当然是一个不错的选择,但如果要传的数据比较大的时候,或者要传整个当前面的数据的时候,session就不太好使了。其实,asp.net不同页面之间的传值,还有很多其它的方法,特摘抄如下,当然,很多时候,以下的某些方法也不太好使,比如页面用了UpdatePanel时,很多就异想不到的问题就会涌现出来了,不过这些则需要读者自己慢慢去调试了。
asp.net如何实现不同页面之间的属性值传递主要是设置PostBackUrl属性值,设置为你所需要跳转页面的名称("~/Default2.aspx"),然后再("~/Default2.aspx")页面中用PreviousPage.FindControl()方法找到所需要当前页的控件。
一、使用QueryString使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:
1,使用控件创建web表单(form)
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量
4,在保存的URL里添加QueryString参数
5,使用Response.Redirect重定向到上面保存的URL
下面的代码片断演示了如何实现这个方法:
源页面WebForm1.aspx.cs中的部分代码:
private void Button1_Click(object sender, System.EventArgs e)
{
string url;
url="WebForm2.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
Response.Redirect(url);
}
目标页面WebForm2.aspx.cs中的部分代码:
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}
代码:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" % >
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.3ppt.com" >
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
<title >第一个页面</title >
</head >
<body >
<form id="form1" runat="server" >
<div >
<asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox >
<br / >
<asp:Button ID="Button1" runat="server" Text="跳转" PostBackUrl="~/Default2.aspx" / >
</div >
</form >
</body >
</html >
第二个页面的CS文件
Default2.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
TextBox tex = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tex.Text);
}
二、Post方法
方式:通用的方式。利用form提交。
特点:最常用的方法。常用技巧是把隐秘的数据存在隐藏域中由form提交。
适用数据:大量数据,包括文件上传。
适用范围:同Get方法
用法:在客户端form指定action目标后submit、在asp.net的伺服端中使用server.Transfer(url)提交;在伺服端中用Request.Form["FormFieldID"]获取。
1、表单提交,
<form action= "target.aspx" method = "post" name = "form1" >
<input name = "param1" value = "1111"/ >
<input name = "param2" value = "2222"/ >
</form >
....
form1.submit();
....
此种方在ASP。NET中无效,因为ASP。NET的表单总是提交到自身页面,如果要提交到别一页面,需要特殊处理。
2、<A href="target.aspx?param1=www.3ppt.com?m2=www.3ppt.com" >链接地址传送</A >
接收页面: string str = Request["param1"]
3、Session共享使用Session变量
使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:
1,在页面里添加必要的控件
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里
4,使用Response.Redirect(或Server.Transfer)方法重定向到另一个页面
5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它
下面的代码片断演示了如何实现这个方法:
源页面WebForm1.aspx.cs中的部分代码:
private void Button1_Click(object sender, System.EventArgs e)
{
//textbox1 and textbox2 are webform
//controls
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Server.Transfer("WebForm2.aspx");
}
目标页面WebForm2.aspx.cs中的部分代码:
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}
发送页面:Session("param1") = "www.3ppt.com";
按收页面 string str = Session("param1").ToString();
4、Application共享发送页面: Application("param1") = "www.lmwlove.com";
按收页面: string str = Application("param1").ToString();
此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。
使用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();
}
ft.NET\Framework\<版本>\CONFIG 目录下的 Machine.config 和 Web.config 文件继承所?