打不开吗?转贴如下:
在asp.net的Web表单间传值
////////////////////////////////////////
介绍
Asp.net的Web表单为开发人员提供了极佳的事件驱动编程模型,简化了应用程序的开发设计,但同时也带来了一些问题。例如,在传统ASP编程中可以很容易地将数据用POST方法传送到另一个ASP页面去处理。但要想在Asp.net的Web表单模型中完成同样的事情却不可能。然而,可以采用其它的一些方法来做到。本文列举了几个办法,具体来说,这些方法包括:querystring,session和Server.Transfer。
使用Querystring
Querystring是页面间传值的老办法。主要的好处就是使用起来非常简单,缺点则是传送的值可以在浏览器的地址栏里看到,而且也不能传送对象。当只需传送少量值并且没有安全性要求时,这个办法尤其适合。要使用这个办法需遵循下列步骤:
创建表单,包括必要的控件
在表单中放置可将表单post到服务器的button或linkbutton控件
在button的click事件处理程序里创建包含了指向目的页面的URL字符串
将要传送的值添加到这个URL字符串里,以作为querystring的参数
使用Response.Redirect导航到指定的URL
下面是代码片段:
源表单
--------------------------------------------------------------
private void Button1_Click(object sender, System.EventArgs e)
{
string url;
url="anotherwebform.aspx?name="
+
TextBox1.Text + "&email="
+
TextBox2.Text;
Response.Redirect(url);
}
目的表单
--------------------------------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}
使用session变量
这是另一种在页面间传值的办法。利用这个办法,可以将要传送的值保存到session变量,然后在另一个Web表单中进行存取。然而,需要知道的是,将太多的数据保存到session变量会给服务器带来额外的负担。所以,应该谨慎地使用这种方法。此外,采用这种方法可能需要在程序中以人工方式来清除不需要的session变量。典型的用法如下:
创建Web表单,包括必要的控件
在表单中放置可将表单post到服务器的button或linkbutton控件
在button的事件处理程序里设置session变量,将要传送的值放入其中
使用Response.Redirect导航到目的表单
在目的表单存取session变量,如必要并进行清除
以下是代码片段:
源表单
--------------------------------------------------------------
private void Button1_Click(object sender, System.EventArgs e)
{
//textbox1 and textbox2 are webform controls
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Response.Redirect("anotherwebform.aspx"
;
}
目的表单
--------------------------------------------------------------
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"
;
}
使用Server.Transfer
这个办法稍微复杂。做法是先将要传送的数据定义为源表单的property属性,因此需要在源表单添加些属性定义代码。然而换来的好处是代码相当清晰,而且能体现出面向对象的特点。步骤如下:
创建Web表单,包括必要的控件
创建用以返回要传送数值的Get属性
在表单中放置可将表单post到服务器的button或linkbutton控件
在button的事件处理程序里调用Server.Transer方法以导航到目的表单
在目的表单中通过Context.Handler属性取得源表单的引用。这样就可以使用在源表单创建的Get属性来存取要传送的数据
以下是代码片段:
源表单
--------------------------------------------------------------
public string Name
{
get
{
return TextBox1.Text;
}
}
public string EMail
{
get
{
return TextBox2.Text;
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("anotherwebform.aspx"
;
}
目的表单
--------------------------------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}
小结
本文介绍了三种在Asp.net页面间传值的办法:Querystring,Session和Server.Transfer。同时也对这三种办法的优缺点进行了分析。