您的位置:首页 > 编程语言 > C#

c#学习笔记三 如何访问另一个页面的控件数据

2008-03-30 10:18 851 查看
在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页面,竟然发现:

TextBox1去死
Button1Button
哦,访问另一个页面的控件数据原来这么简单!

补充一种方法:

Default2的page_load中添加如下代码




protected void Page_Load(object sender, EventArgs e)




...{


TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");


Response.Write(tb.Text);


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐