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

      在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(
"
" );
            Response.Write(Request.Params.GetKey(i));
            Response.Write(
"
" );
            Response.Write(Request.Params[i]);
            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);
    }

你可能感兴趣的:(.net,学习)