在ASPNET中跨頁提交允許把一個頁面的回調回調提交到一個不同的網頁中本文中我們將探索一些不同的跨頁提交的方法另翻譯的特別困難請各位朋友批評指正
在ASPNET中跨頁提交允許把一個頁面的回調回調提交到一個不同的網頁中本文中我們將探索一些不同的跨頁提交的方法
ASPNET只提供了提交到本頁的方式在很多情況下我們的解決方案中會有跨頁的提交的需求傳統的方法都是通過ResponseRedirect或者ServerTransfer的方式轉移到另外的一頁然後模擬出一個跨頁回調的效果
ASPNET提供了這種能實現從一個表單頁提交到另一個表單頁的跨頁提交的功能
如何實現跨頁提交
要實現跨頁提交在源表單頁裡需要設置控件的PostBackURL這個屬性來實現IButtonControl(比如ButtonImageButtonLinkButton)接口來定位到目標表單頁當用戶單擊這個button控件的時候表單頁就會跨頁提交到目標表單頁不需要在源表單頁中進行任何設置或編寫任何的代碼
通過FindControl方法在目標頁中檢索源表單頁中的信息
目標表單頁獲得跨過來的那一頁請求的信息是通過一個不為空的PreviousPage方法這個屬性代表著源表單頁並且為源表單頁和其控件建立引用
源表單頁上的控件在目標頁上可以通過PreviousPage的FindControl方法來獲得
protected void Page_Load(object sender EventArgs e)
{
TextBox txtStartDate = (TextBox) PreviousPageFindControl(txtStartDate );
}
這時目標表單頁是不知道源表單頁的任何信息的PreviousPage這個屬性的類型是Page所以檢索控件就可以使用FindControl的方法但開發人員需要對源表單頁的結構有一個大體的了解而使用FindControl方法必然會有一些限制比如FindControl方法只能依靠開發人員提供的控件的id屬性來定位到一個控件如果源表單頁的控件id變了的話那麼這個方法就有可能失效FindControl方法只能處理那些在當前容器裡的控件如果開發人員需要檢索在其它控件中(容器)的控件的話那麼首先需要獲得其父控件的一個引用
通過@PreviousPageType指令在目標頁中檢索源表單頁的信息
另外一個方法就是在源表單頁已經確定的情況下使用@PreviousPageType指令這個指令可以在目標表單頁中以強類型的方式訪問源表單頁這個指令指定源表單頁使用VirtualPath屬性還是TypeName屬性PreviousPage屬性返回一個強類型的結果來對源表單頁進行引用其允許訪問源目標頁的公共屬性
SourcePageaspx:
<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=~/targetpageaspx />
public string FirstName
{
get { return txtFirstNameText; }
}
TargetPageaspx
<%@ PreviousPageType VirtualPath=sourcepageaspx %>
string strFirstName;
strFirstName = PreviousPageFirstName //Strongly Typed PreviousPage allows direct access to the public properties of the source page
通過@Reference指令在目標表單頁中訪問源表單頁
第三種以強類型訪問源表單頁的方法就是在目標表單頁中加入@Reference指令到源目標表單頁的引用然後通過再PreviousPage屬性來訪問源表單頁
通過IsCrossPagePostBack屬性來檢測跨頁的提交
當源表單頁跨頁提交到目標表單頁的時候目標表單頁需要檢索源表單頁源表單頁就需要在內存中重新加載一次並且這個過程要經歷除了展現(render)以外的所有頁面周期所要經過的步驟而這個被重新加載的頁面就是在目標表單頁檢索源表單頁的信息用到的
源表單頁的IsCrossPagePostBack屬性指明在目標表單頁中使用PerviousPage引用的時候是否重新字內存中被加載
. 頁A提交到頁B
. 頁B訪問PreviousPage當源表單頁中的IsCrossPostBack的屬性為true時源目標頁就被重新加載一次
IsCrossPagePostBack屬性可以使其在被目標頁的PreviousPage引用的時候避免不必要的被重新加載一次
驗證
如果源表單頁有一些驗證控件源表單頁會在跨頁提交的時候驗證input裡輸入的內容目標表單頁可以包含一個驗證PreviousPageIsValid來捕獲源表單頁裡的非法的提交
應用的場景
ASPNET限制只能進行本頁的回調在ASPNET中你可以跨頁進行回調到一個不同的表單頁來實現更多的功能使代碼結構化並且易於維護
比如頁A裡匯集了一些基於web的報表並且需要跨頁提交到另一個需要根據前一頁的一些參數產生報表的表單頁
典型的需要跨頁提交的場合就是當你在同一個表單裡點擊不同的按鈕的時候需要把表單數據提交到不同的表單頁進行處理目標表單頁被不同的控件所指定允許把表單的數據提交過去
當跨應用程序提交的時候跨頁提交允許提交表單的數據但是沒有提供源表單頁的空間和viewstate的提交
翻譯心得
目前為止翻譯的最別扭的一篇文章很多都要靠上下文來猜作者的意思而按照原文照著翻譯下來後雖然意思是明白但是怎麼看都不順所以用自己的話概括了一下作者的意思有些話比較長斷句上可能會有錯誤請各位朋友批評指正
學習心得
早先總覺得跨頁提交是十分不被提倡的方法但是有的時候可能需求就格路到那裡了就需要那麼解決所以多一個方法就多一條路從中我們還是能看到ASPNET與ASPNET的區別
From:http://tw.wingwit.com/Article/program/net/201311/13432.html