在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.