在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( " <table> " );
for ( int i = 0 ; i < Request.Params.Count; i ++ )
{
Response.Write( " <tr><td> " );
Response.Write(Request.Params.GetKey(i));
Response.Write( " </td><td> " );
Response.Write(Request.Params[i]);
Response.Write( " </td></tr> " );
}
Response.Write( " </table> " );
}
执行程序,在TextBox1中输入“去死”,点击Button1,跳转到Default2页面,竟然发现:
哦,访问另一个页面的控件数据原来这么简单!
补充一种方法:
Default2的page_load中添加如下代码
protected void Page_Load( object sender, EventArgs e)
{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tb.Text);
}
————————————————
版权声明:本文为CSDN博主「一等兵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzhdi/article/details/2229947