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 ({
string url ="~/Default2.aspx?TextBox1="+ TextBox1.Text;
Response.Redirect(url);
}
最後,在Default2窗體的page_load事件中讀取資料。
protectedvoid Page_Load(object sender, EventArgs e){
Response.Write(Request.Params[
}
這種方式不是我想象的那種。
2、 使用session變數
把控制元件中的值存在session變數中。
{
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);
}