在Vs2005中新建一个Web项目,添加两个Web窗体(Default、Default2),在Default窗体上添加两个标准控件,一个TextBox(TextBox1)、一个Button(Button1),设置Button1的PostBackUrl属性指向Default2窗体。那么如何在Default2窗体上显示那个TextBox1所填写的内容呢?
上网Google一下,发现提供的方法大致有三种:
1、在Button1的Click事件中,把TextBox1的内容封装到一个Url中,然后,重定向到Default2窗体。
private
void
button1_click (
object
sender, system.eventargs e)
{
string
url
=
"
~/Default2.aspx?TextBox1=
"
+
TextBox1.Text;
Response.Redirect(url);
}
最后,在Default2窗体的page_load事件中读取数据。
protected
void
Page_Load(
object
sender, EventArgs e)
{
Response.Write(Request.Params[
"
TextBox1
"
]);
}
这种方式不是我想象的那种。
2、 使用session变量
把控件中的值存在session变量中。
private
void
button1_click (
object
sender, system.eventargs e)
{
Session[
"
TextBox1
"
]
=
TextBox1.Text;
Server.Transfer(
"
~/Default2.aspx
"
);
}
然后在Default2窗体的page_load事件中读取数据。
protected
void
Page_Load(
object
sender, EventArgs e)
...
{
Response.Write(Session["TextBox1"].ToString());
Session.Remove("TextBox1");
}
这种方式也不是我想象的。
3、使用server.transfer
在Default代码页中,添加一下代码
public
string
TextBoxValue
{
get
{
return
this
.TextBox1.Text; }
set
{
this
.TextBox1.Text
=
value; }
}
protected
void
Button1_Click(
object
sender, EventArgs e)
{
Server.Transfer(
"
~/Default2.aspx
"
);
}
Default2的page_load代码
protected
void
Page_Load(
object
sender, EventArgs e)
{
ASP.default_aspx wf1;
wf1
=
(ASP.default_aspx)Context.Handler;
Response.Write(wf1.TextBoxValue);
}
这种方法与我想象的一致,是不是忒麻烦了?
能不能不使用Click事件,直接设置button的PostBackUrl属性呢?
运行出现错误," wf1 = (ASP.default_aspx)Context.Handler; ” 无法将类型为“ASP.default2_aspx”的对象强制转换为类型“ASP.default_aspx”。
能不能去掉Default代码中定义的属性,直接在Default2中访问TextBox1控件呢?
protected
void
Page_Load(
object
sender, EventArgs e)
{
ASP.default_aspx wf1;
wf1
=
(ASP.default_aspx)Context.Handler;
Response.Write(wf1.TextBox1.Text);
}
但在编译时,出现错误:TextBox1不可访问,因为它受保护级别限制。
晕!
到底,Default页面向Default2页面发送了什么数据?设置Button1的PostBackUrl属性指向Default2窗体。在Default2页面中添加下面的代码
protected
void
Page_Load(
object
sender, EventArgs e)
{
Response.Write(
"
"
);
for
(
int
i
=
0
; i
<
Request.Params.Count; i
++
)
{
Response.Write(
"
"
); Response.Write(Request.Params.GetKey(i)); Response.Write(
"
|
"
); Response.Write(Request.Params[i]); Response.Write(
"
|
"
);
}
Response.Write(
"
"
);
}
执行程序,在TextBox1中输入“去死”,点击Button1,跳转到Default2页面,竟然发现:
TextBox1 |
去死 |
Button1 |
Button |
哦,访问另一个页面的控件数据原来这么简单!
补充一种方法:
Default2的page_load中添加如下代码
protected
void
Page_Load(
object
sender, EventArgs e)
...
{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tb.Text);
}