1. QuerySting
QueryString是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。此方法适用于传递一个安全性不是那么重要或者是一个简单的数值,示例:
利用url和request.QueryString[]来传递
--a.aspx中C#代码
private void button1_click(object sender, System.EventArgs e)
{
string url;
url = "b.aspx?name="+ "root" +"&password" + label1.Text;
response.redirect(url);
}
--b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
label1.Text = request.QueryString["name"];
label2.Text = request.QueryString["password"];
}
QueryString传值又分类post ,get格式如:
//post请求
string name =Request.Form.Get("name").toString();
//get请求
string name = Request.QueryString["name"].toString();
无论是否是post与get传值都可用
string name = Request["name"].toString();
表单提交中get和post方式的区别如下:
1) get是从服务器上获取数据,post是向服务器传送数据;
2) get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在
URL中可以看到;
post是通过http post机制,将表单内各个字段与其内容放置在html header内一起传送到action属性所指
的URL地址,用户看不到这个过程;
3) 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用
Request.Form获取提交的数据;
4) get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制;
5) get安全性非常低,post安全性较高。
2. Window.location.href
JavaScript中写
--login.aspx中的JS代码,也可以单独放在JS脚本里
$("#button1").click(function () {
var name=$("#name1").text();
var password=$("#password").text();
var sex=$("#sex1").text();
window.location.href = "main.aspx?name=" + name + "&password" + password +"&sex" +"sex";
})
--在main.aspx中的JS
function getQueryString(name) {
//获得当前页面URL的某个URL参数
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
//开始匹配,找到了返回对应URL值,没找到返回NULL
if (r != null)
return unescape(r[2]);
return null;
}
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面
3. Session
使用Session变量传值不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。示例:
--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. 比较各个传值方式的优缺点
Session
-> 方式:将用户数据存储在服务端
-> 特点:asp.net中可以设置session的存储方式、位置、SessionID的保存是否依赖cookie,可
以直接存储对象
->缺点:asp.net中有失效的隐患
cookie
-> 方式:将数据存在客户端的经典方法
-> 缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每个容量4096字节
Cache
-> 方式:将用户数据存储在服务端数据缓存中
-> 特点:可以大大提高效率。 可以直接存储对象