1. 程式人生 > >c#學習筆記三 如何訪問另一個頁面的控制元件資料

c#學習筆記三 如何訪問另一個頁面的控制元件資料

      在Vs2005中新建一個Web專案,新增兩個Web窗體(Default、Default2),在Default窗體上新增兩個標準控制元件,一個TextBox(TextBox1)、一個Button(Button1),設定Button1的PostBackUrl屬性指向Default2窗體。那麼如何在Default2窗體上顯示那個TextBox1所填寫的內容呢?

      上網Google一下,發現提供的方法大致有三種:

            1、在Button1的Click事件中,把TextBox1的內容封裝到一個Url中,然後,重定向到Default2窗體。

privatevoid button1_click (
object sender, system.eventargs e) 
                 { 
                        
string url ="~/Default2.aspx?TextBox1="+ TextBox1.Text;
                        Response.Redirect(url); 

                  }

             最後,在Default2窗體的page_load事件中讀取資料。

protectedvoid Page_Load(object sender, EventArgs e)
                {
                  Response.Write(Request.Params[
"TextBox1"]);
                }

               這種方式不是我想象的那種。
            2、 使用session變數
                把控制元件中的值存在session變數中。

privatevoid button1_click (object sender, system.eventargs e) 
                {
                  Session[
"TextBox1"= TextBox1.Text;
                  Server.Transfer(
"~/Default2.aspx
");
                } 

              然後在Default2窗體的page_load事件中讀取資料。

protectedvoid Page_Load(object sender, EventArgs e)
                  
{
                     Response.Write(Session[
"TextBox1"].ToString());
                     Session.Remove(
"TextBox1");
                  }

            這種方式也不是我想象的。
             3、使用server.transfer 

                在Default內碼表中,新增一下程式碼

publicstring TextBoxValue
    {
        
get { returnthis.TextBox1.Text; }
        
set { this.TextBox1.Text = value; }
    }
protectedvoid Button1_Click(object sender, EventArgs e)
    {
        Server.Transfer(
"~/Default2.aspx");
    }

            Default2的page_load程式碼

protectedvoid 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控制元件呢?

protectedvoid 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頁面中新增下面的程式碼

protectedvoid 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中新增如下程式碼

protectedvoid Page_Load(object sender, EventArgs e)
    
{
        TextBox tb 
= (TextBox)PreviousPage.FindControl("TextBox1");
        Response.Write(tb.Text);
    }