1. 程式人生 > >如何在asp.net把表單提交到另一頁

如何在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>
/////////////////////////////////////////////////////////////////////////////////////////////////////////