在ASP.NET2.0中,跨頁提交允許把一個頁面的回調回調提交到一個不同的網 頁中。本文中我們將探索一些不同的跨頁提交的方法。另,翻譯的特別困難,請 各位朋友批評指正。
ASP.NET1.1隻提供了提交到本頁的方式。在很多情況下,我們的解決方案中 會有跨頁的提交的需求,傳統的方法都是通過Response,Redirect或者 Server.Transfer的方式轉移到另外的一頁然後類比出一個跨頁回調的效果。
ASP.NET2.0提供了這種能實現從一個表單頁提交到另一個表單頁的跨頁提交 的功能。
如何?跨頁提交
要實現跨頁提交,在源表單頁裡,需要設定控制項的PostBackURL這個屬性來實 現IButtonControl(比如Button,ImageButton,LinkButton)介面來定位到目標 表單頁。當使用者單擊這個button控制項的時候,表單頁就會跨頁提交到目標表單頁 。不需要在源表單頁中進行任何設定或編寫任何的代碼。
通過FindControl方法在目標頁中檢索源表單頁中的資訊
目標表單頁獲得“跨”過來的那一頁請求的資訊是通過一個不為空白的 PreviousPage方法。這個屬性代表著源表單頁並且為源表單頁和其控制項建立引用 。
源表單頁上的控制項在目標頁上可以通過PreviousPage的FindControl方法來獲 得。
protected void Page_Load(object sender, EventArgs e)
{
...
TextBox txtStartDate = (TextBox) PreviousPage.FindControl ("txtStartDate ");
...
}
這時目標表單頁是不知道源表單頁的任何資訊的。PreviousPage這個屬性的 類型是Page,所以檢索控制項就可以使用FindControl的方法,但開發人員需要對 源表單頁的結構有一個大體的瞭解。而使用FindControl方法必然會有一些限制 ,比如FindControl方法只能依靠開發人員提供的控制項的id屬性來定位到一個控 件。如果源表單頁的控制項id變了的話那麼這個方法就有可能失效。FindControl 方法只能處理那些在當前容器裡的控制項,如果開發人員需要檢索在其它控制項中( 容器)的控制項的話,那麼首先需要獲得其父控制項的一個引用。
通過@PreviousPageType指令在目標頁中檢索源表單頁的資訊
另外一個方法就是在源表單頁已經確定的情況下,使用@PreviousPageType指 令。這個指令可以在目標表單頁中以強型別的方式訪問源表單頁。這個指令指定 源表單頁使用VirtualPath屬性還是TypeName屬性。PreviousPage屬性返回一個 強型別的結果來對源表單頁進行引用。其允許訪問源目標頁的公用屬性。
SourcePage.aspx:
<form runat="server" >
...
<asp:textbox runat="server" id="txtFirstName"/>
<asp:textbox runat="server" id="txtLastName"/>
<asp:button runat="server" id="btnViewReport" Text="View Report" PostbackURL="~/targetpage.aspx" />
...
public string FirstName
{
get { return txtFirstName.Text; }
}
...
TargetPage.aspx
<%@ PreviousPageType VirtualPath="sourcepage.aspx" %>
string strFirstName;
strFirstName = PreviousPage.FirstName //Strongly Typed PreviousPage allows direct access to the public properties of the source page.