ASP.NET的多种传值方式
一、Cookie传值
1、优点:使用简单,可以保持用户状态;
2、缺点:安全性不高;
使用方法:
(1)在源页面的代码中创建需要传递的名称和值构造Cookie对象:
HttpCookie cookid = new HttpCookie("test");
cookid.Value = txtName.Text; //txtName为控件ID
Response.Cookies.Add(cookid);
(2)目的页面接收值:
lblUserName .Text=Request.Cookies["test"].Value.ToString(); //lblUserName 为控件ID
还有一种较为简便的cookid传值方式:
(1)在源页面创建传递名称和值构造Cookid对象:
Response.Cookies["UserName1"].Value = txtName.Text; //txtName为控件ID,UserName1为创建的传递名称
(2)目的页面接收值:
lblUserName.Text =Request.Cookies["UserName1"].Value; //lblUserName 为控件ID
二、QueryString传值
1、优点:使用简单,可以传递安全性要求不高的数字或文本值;
2、缺点:缺少安全性,不能传递对象;
使用方法:
(1)源页面的代码中用需要传递的名称和值构造URL地址;
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text; //Label1为控件ID
Response.Redirect(s_url);
}
(2)目的页面的代码中使用Request.QueryString[“name”];取出URL地址中传递的值;
lblUserName.Text = Request.QueryString["name"].ToString(); //lblUserName为控件ID
三、Session传值
1、优点:用法简单,不仅能传递简单数据类型,还能传递对象;
2、缺点:数据容易丢失,消耗服务器资源;
使用方法:
(1)在源页面的代码中创建需要传递的名称和值构造Session变量;
Session["UserName"] = txtName.Text; //txtName为控件ID
(2)在目的页面代码中使用Session变量取出索要传递的值;
lblName.Text = Session["UserName"].ToString(); //lblUserName 为控件ID
四、在三层架构中使用Model层进行传值
1、优点:能存储复杂数据,使传递值更为简单;
2、缺点:传递过程较为复杂;
使用方法:
(1)在源页面代码中创建需要传递的名称和值构造变量;
tblUser.UserName = txtName.Text;
tblUser.UserPwd = txtPwd.Text;
(2)在Model层中创建类,用于储存所需要的值;
public static class tblUser
{
public static string UserName;
public static string UserPwd;
}
(3)在目的页面获取值时,可直接调用Model所创建的类;
string sqlcomm = string.Format("update tblUser set User_password='{0}' where User_name='{1}'",newPwdDAl,tblUser.UserName);
注意:在传值过程中需要引入Model层;
五、Application传值
1、优点:使用简单,可以传递数据与对象;
2、缺点:Application是作为全局变量进行传值,所以容易被误操作;
使用方法:
(1)在源页面的代码中创建需要传递的名称和值构造Application变量;
Application["name"] = Label1.Text; //Label1为控件ID
(2)在目的页面的代码使用Application变量取出传递的值;
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
六、Server.Transfer传值
1、优点:直接在服务器端重定向,使用简单方便;
2、缺点:可能出现指向性Bug问题,导致网站的图片等出错;
使用方法:
(1)在源页面的代码中,使用Server.Transfer跳转到目的页面传递页面数据;
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("WebForm1.aspx");
}
(2)在目的页面中,使用Context.Handler来接收数据;然后用formerPage的属性和方法来获取前一个页面的值;
private void Page_Load(object sender, EventArgs e)
{
WebForm newWeb; //实例化WebForm窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}