一般跨網頁傳遞參數,很簡單到很多書都不講,大致有五種方法。
以送出頁為SendToB.aspx,接收頁為RecvFromA.aspx為例。
1.透過Http Html Form Get:
送出頁:Response.Redirect("~/RecvFromA.aspx?id=" + TextBox1.Text);
接收頁:string sId = Request.QueryString["id"];
◎通用性最佳,但不宜傳送可能有資訊安全疑慮之參數,且要注意參數編碼與轉碼問題。
2.透過Http Html Form Post:
送出頁:Response.Redirect("~/RecvFromA.aspx"); 或使用 Button的PostBackUrl屬性填入~/RecvFromA.aspx。
接收頁:string sId = Request.Form["id"];
◎通用性次佳,但在Master Page下無效。
3.透過ASP.NET PreviousPage:
送出頁:Response.Redirect("~/RecvFromA.aspx"); 或使用 Button的PostBackUrl屬性填入~/RecvFromA.aspx。
接收頁:
TextBox oTB = (TextBox)this.PreviousPage.FindControl("TextBox1");
this.Label1.Text = oTB.Text;
◎只能用於本身且是ASP.NET網站。在Master Page下需要修改程式碼。
4.透過ASP.NET PreviousPage加自訂公用屬性:
送出頁:先在Class內加上自訂公用屬性。
public String SearchString
{
get
{
return
TextBox1.Text;
}
}
再使用 Button的PostBackUrl屬性填入~/RecvFromA.aspx 。
接收頁:將RecvFromA.aspx頁面的第一列後插入以下指令列,<%@ PreviousPageType VirtualPath="~/SendToB.aspx" %>
接著在RecvFromA.cs的Page_Load()函式中使用Label1.Text = PreviousPage.SearchString; 取得前頁公用屬性。
◎
只能用於本身且是ASP.NET網站 ,且送出頁與接收頁無法二對一傳遞。不論一般跨網頁或Master Page下都不需要修改程式碼。
5.透過ASP.NET Session傳遞
送出頁:使用 Button的onClick事件填入Session["SearchString"] = TextBox1.Text;
Response.Redirect("~/RecvFromA.aspx");
接收頁:Page_Load()函式中使用Label1.Text =
Session["SearchString"].ToString();
◎ 只能用於本身且是ASP.NET網站,簡單好用跟寫 AP 觀念一樣。
但是,若使用MasterPage跨網頁傳遞參數,第一種方法可以,第二種方法會抓不到,第三種方法則接收頁需要修改語法如下,第四種方法可以,第五種方法可以。
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
if (PreviousPage.IsCrossPagePostBack)
{
//使用MasterPage時, 使用此語法來查找到前一頁中Content Page內的控制項
TextBox oTB = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
//使用MasterPage時, 使用此語法來查找到前一頁中Master Page內的控制項
//TextBox oTB = (TextBox)this.PreviousPage.Master.FindControl("TextBox1");
//顯示上頁欄位中傳遞過來的參數
this.Label1.Text = oTB.Text;
}
}
}
---
Welly
沒有留言:
張貼留言