在 ASP.NET中,每一個aspx頁面在server端都對應一個System.Web.UI.Page執行個體,是以把一個頁面Form中Server Controls的内容(server端對應于page類執行個體的資料) 送出給另一個page類,跟asp中的實作方法有所不同。
在 asp.net中,Form 送出的工作原理是:
比如說在您的一個aspx檔案中,您使用了一個TextBox Server Control. 在您的Page class中, 有這麼一個執行個體:
TextBox TextBox1 = new TextBox();
您可以使用TextBox1在伺服器端來引用該對象。當 ASP.NET執行完該頁面之後,用戶端(浏覽器)得到的純HTML/DHTML中,會産生下面的代碼,對應于伺服器端的邏輯:
<input name="TextBox1" type="text" id="TextBox1" />
注意:上邊的“name”屬性,和伺服器端代碼中TextBox1對象的UniqueID Property是一緻的。
此時的用戶端跟您的程式互動的唯一方式就是HTTP中的POST. POST 送出之後, ASP.NET檢查“name"是否和其所 送出頁面對應得Page類中的某一Control的UniqueID一緻,如果有,并且該Server Control實作了IPostBackDataHandler借口,則調用LoadPostData函數,您可以重載這個函數。如果實作了IPostBackEventHanlder, ASP.NET調用RaisePostBackEvent().
在 ASP.NET中傳輸Form到另外的頁面,Inline Code(代碼和html在同一頁面)和Code-Behind(代碼和html在不同的頁面)地實作方式有所不同。下面是Inline Code的一個例子:
在WebForm1.aspx中:
1。為該頁面聲明類的名稱;<%@ Page Language="C#" ClassName="FirstPageClass" %>
2。為每一個要傳遞到另外頁面的元素,定義帶Get accessor的Property:
3。使用Server.Transfer("Webform2.aspx")把控制權 送出給另外一個WebForm class. WebForm1.aspx <%@ Page Language="C#" ClassName="FirstPageClass" %> <html>
<head>
<script runat="server">
public string FirstName
{
get
{
return first.Text;
}
} public string LastName
{
get
{
return last.Text;
}
} void ButtonClicked(object sender, EventArgs e)
{
Server.Transfer("secondpage.aspx");
} </script> </head> <body> <form runat="server">
First Name: <asp:TextBox id="first" runat="server"/>
<br>
Last Name: <asp:TextBox id="last" runat="server"/>
<br>
<asp:Button OnClick="ButtonClicked" Text="Go to second page" runat=server />
</form>
</body>
</html>
// 在目的Webform2.aspx中: 1。添加Reference指令;<%@ Reference Page="firstpage.aspx" %>
2。聲明一個WebForm1.aspx對應的class的執行個體:FirstPageClass fp;
3。利用HttpContext class, 獲得第一個得到 HTTP Request 的頁面的執行個體(Webform1.aspx): fp = (FirstPageClass)Context.Handler; WebForm2.aspx
<%@ Page Language="C#" %>
<%@ Reference Page="firstpage.aspx" %>
<html>
<head>
<script runat="server"> FirstPageClass fp; void Page_Load()
{
if (!IsPostBack)
{
fp = (FirstPageClass)Context.Handler;
}
}
</script>
</head>
<body> <form runat="server">
Hello <%=fp.FirstName%> <%=fp.LastName%>
</form> </body>
</html>
/ 關于Code-Behinde方式中的詳細資訊,請您參閱下面的文章:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconpassingservercontrolvaluesbetweenpages.asp