天天看點

如何在asp.net把表單送出到另一頁

在 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