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页面,竟然发现:
哦,访问另一个页面的控件数据原来这么简单!
补充一种方法:
Default2的page_load中添加如下代码
protected void Page_Load(object sender, EventArgs e)
...{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tb.Text);
}
上网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 | 去死 |
Button1 | Button |
补充一种方法:
Default2的page_load中添加如下代码
protected void Page_Load(object sender, EventArgs e)
...{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
Response.Write(tb.Text);
}
相关文章推荐
- C#学习笔记——LINQ数据访问
- C#网站登录学习笔记(二):访问需登录后才能访问的页面
- C#网站登录学习笔记(二):访问需登录后才能访问的页面
- C#学习笔记:GDI图形高级编程(1)——如何将图形画到控件上
- SQL学习笔记[6] - SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- Asp.Net--DropDownList与DataTable数据绑定的方法(C#)[学习笔记]
- C#学习笔记(六)抽象类 访问限制关键字 委托 事件
- 微软企业库5.0学习笔记(三十四)数据访问模块 各种获取数据的方式
- Beginning Spring学习笔记——第4章(二)使用Spring执行数据访问操作
- OpenCV学习笔记——使用OpenCV访问图像数据
- 安卓学习笔记---如何保存数据到SharePreference里面,获取所有sp文件以及删除文件
- (原创)c#学习笔记06--函数02--变量的作用域02--参数和返回值与全局数据
- 黑马程序员 C#学习笔记⑦ 文件系统数据一FileStream
- 使用iframe如何通过url传参把数据从一个页面传到另一个页面(contentWindow)
- c#之如何安全的跨线程访问控件
- [Nodejs]初探nodejs学习笔记- 如何使用nodejs接收get/post 数据(参数)
- C#学习笔记3:提示“截断字符串或二进制数据”错误解决方法
- [C#学习笔记之多线程2]多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore .
- OAF学习笔记-18- Update后页面显示不是最新的数据的解决方法