国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ASP.NET2.0的跨頁(yè)回調(diào)

2019-11-18 16:56:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

摘要:翻譯www.asp.net的一篇文章,Cross Page Postback in ASP.Net 2.0,作者是Dipal Choksi。在ASP.NET2.0中,跨頁(yè)提交允許把一個(gè)頁(yè)面的回調(diào)回調(diào)提交到一個(gè)不同的網(wǎng)頁(yè)中。本文中我們將探索一些不同的跨頁(yè)提交的方法。另,翻譯的特別困難,請(qǐng)各位朋友批評(píng)指正。

在ASP.NET2.0中,跨頁(yè)提交允許把一個(gè)頁(yè)面的回調(diào)回調(diào)提交到一個(gè)不同的網(wǎng)頁(yè)中。本文中我們將探索一些不同的跨頁(yè)提交的方法。

ASP.NET1.1只提供了提交到本頁(yè)的方式。在很多情況下,我們的解決方案中會(huì)有跨頁(yè)的提交的需求,傳統(tǒng)的方法都是通過(guò)Response,Redirect或者Server.Transfer的方式轉(zhuǎn)移到另外的一頁(yè)然后模擬出一個(gè)跨頁(yè)回調(diào)的效果。

ASP.NET2.0提供了這種能實(shí)現(xiàn)從一個(gè)表單頁(yè)提交到另一個(gè)表單頁(yè)的跨頁(yè)提交的功能。

如何實(shí)現(xiàn)跨頁(yè)提交

要實(shí)現(xiàn)跨頁(yè)提交,在源表單頁(yè)里,需要設(shè)置控件的PostBackURL這個(gè)屬性來(lái)實(shí)現(xiàn)IButtonControl(比如Button,ImageButton,LinkButton)接口來(lái)定位到目標(biāo)表單頁(yè)。當(dāng)用戶單擊這個(gè)button控件的時(shí)候,表單頁(yè)就會(huì)跨頁(yè)提交到目標(biāo)表單頁(yè)。不需要在源表單頁(yè)中進(jìn)行任何設(shè)置或編寫(xiě)任何的代碼。

通過(guò)FindControl方法在目標(biāo)頁(yè)中檢索源表單頁(yè)中的信息

目標(biāo)表單頁(yè)獲得“跨”過(guò)來(lái)的那一頁(yè)請(qǐng)求的信息是通過(guò)一個(gè)不為空的PReviousPage方法。這個(gè)屬性代表著源表單頁(yè)并且為源表單頁(yè)和其控件建立引用。

源表單頁(yè)上的控件在目標(biāo)頁(yè)上可以通過(guò)PreviousPage的FindControl方法來(lái)獲得。

protected void Page_Load(object sender, EventArgs e)

{

    ...

    TextBox txtStartDate = (TextBox) PreviousPage.FindControl("txtStartDate ");

    ...

}

這時(shí)目標(biāo)表單頁(yè)是不知道源表單頁(yè)的任何信息的。PreviousPage這個(gè)屬性的類型是Page,所以檢索控件就可以使用FindControl的方法,但開(kāi)發(fā)人員需要對(duì)源表單頁(yè)的結(jié)構(gòu)有一個(gè)大體的了解。而使用FindControl方法必然會(huì)有一些限制,比如FindControl方法只能依靠開(kāi)發(fā)人員提供的控件的id屬性來(lái)定位到一個(gè)控件。如果源表單頁(yè)的控件id變了的話那么這個(gè)方法就有可能失效。FindControl方法只能處理那些在當(dāng)前容器里的控件,如果開(kāi)發(fā)人員需要檢索在其它控件中(容器)的控件的話,那么首先需要獲得其父控件的一個(gè)引用。

通過(guò)@PreviousPageType指令在目標(biāo)頁(yè)中檢索源表單頁(yè)的信息

另外一個(gè)方法就是在源表單頁(yè)已經(jīng)確定的情況下,使用@PreviousPageType指令。這個(gè)指令可以在目標(biāo)表單頁(yè)中以強(qiáng)類型的方式訪問(wèn)源表單頁(yè)。這個(gè)指令指定源表單頁(yè)使用VirtualPath屬性還是TypeName屬性。PreviousPage屬性返回一個(gè)強(qiáng)類型的結(jié)果來(lái)對(duì)源表單頁(yè)進(jìn)行引用。其允許訪問(wèn)源目標(biāo)頁(yè)的公共屬性。

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.

通過(guò)@Reference指令在目標(biāo)表單頁(yè)中訪問(wèn)源表單頁(yè)

第三種以強(qiáng)類型訪問(wèn)源表單頁(yè)的方法就是在目標(biāo)表單頁(yè)中加入@Reference指令到源目標(biāo)表單頁(yè)的引用,然后通過(guò)再PreviousPage屬性來(lái)訪問(wèn)源表單頁(yè)。

通過(guò)IsCrossPagePostBack屬性來(lái)檢測(cè)跨頁(yè)的提交

當(dāng)源表單頁(yè)跨頁(yè)提交到目標(biāo)表單頁(yè)的時(shí)候,目標(biāo)表單頁(yè)需要檢索源表單頁(yè),源表單頁(yè)就需要在內(nèi)存中重新加載一次,并且這個(gè)過(guò)程要經(jīng)歷除了展現(xiàn)(render)以外的所有頁(yè)面周期所要經(jīng)過(guò)的步驟,而這個(gè)被重新加載的頁(yè)面就是在目標(biāo)表單頁(yè)檢索源表單頁(yè)的信息用到的。

源表單頁(yè)的IsCrossPagePostBack屬性指明在目標(biāo)表單頁(yè)中使用PerviousPage引用的時(shí)候是否重新字內(nèi)存中被加載。

1.   頁(yè)A提交到頁(yè)B

2.   頁(yè)B訪問(wèn)PreviousPage:當(dāng)源表單頁(yè)中的IsCrossPostBack的屬性為true時(shí)源目標(biāo)頁(yè)就被重新加載一次。

IsCrossPagePostBack屬性可以使其在被目標(biāo)頁(yè)的PreviousPage引用的時(shí)候避免不必要的被重新加載一次。

驗(yàn)證

如果源表單頁(yè)有一些驗(yàn)證控件,源表單頁(yè)會(huì)在跨頁(yè)提交的時(shí)候驗(yàn)證input里輸入的內(nèi)容。目標(biāo)表單頁(yè)可以包含一個(gè)驗(yàn)證:PreviousPage.IsValid來(lái)捕獲源表單頁(yè)里的非法的提交。

應(yīng)用的場(chǎng)景

ASP.NET1.1限制只能進(jìn)行本頁(yè)的回調(diào)。在ASP.NET2.0中你可以跨頁(yè)進(jìn)行回調(diào)到一個(gè)不同的表單頁(yè),來(lái)實(shí)現(xiàn)更多的功能,使代碼結(jié)構(gòu)化并且易于維護(hù)。

比如,頁(yè)A里匯集了一些基于web的報(bào)表,并且需要跨頁(yè)提交到另一個(gè)需要根據(jù)前一頁(yè)的一些參數(shù)產(chǎn)生報(bào)表的表單頁(yè)。

典型的需要跨頁(yè)提交的場(chǎng)合就是當(dāng)你在同一個(gè)表單里點(diǎn)擊不同的按鈕的時(shí)候需要把表單數(shù)據(jù)提交到不同的表單頁(yè)進(jìn)行處理。目標(biāo)表單頁(yè)被不同的控件所指定,允許把表單的數(shù)據(jù)提交過(guò)去。

當(dāng)跨應(yīng)用程序提交的時(shí)候,跨頁(yè)提交允許提交表單的數(shù)據(jù),但是沒(méi)有提供源表單頁(yè)的空間和viewstate的提交。

-------------------------------------

翻譯心得

目前為止翻譯的最別扭的一篇文章,很多都要靠上下文來(lái)猜作者的意思,而按照原文照著翻譯下來(lái)后,雖然意思是明白,但是怎么看都不順,所以,用自己的話概括了一下作者的意思。有些話比較長(zhǎng),斷句上可能會(huì)有錯(cuò)誤,請(qǐng)各位朋友批評(píng)指正。

學(xué)習(xí)心得

早先總覺(jué)得跨頁(yè)提交是十分不被提倡的方法,但是,有的時(shí)候可能需求就格路到那里了,就需要那么解決,所以多一個(gè)方法就多一條路,從中我們還是能看到ASP.NET2.0與ASP.NET1.1的區(qū)別。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安阳市| 临泉县| 丹东市| 临江市| 闵行区| 乐陵市| 高雄县| 宁蒗| 尚志市| 正安县| 普格县| 临海市| 丰城市| 玉树县| 乃东县| 竹山县| 竹北市| 博罗县| 法库县| 漯河市| 察隅县| 珲春市| 桃园县| 延边| 突泉县| 海林市| 内乡县| 南丰县| 繁昌县| 通榆县| 杭锦后旗| 晋城| 眉山市| 抚松县| 陇川县| 马边| 玛多县| 南郑县| 玛沁县| 屯门区| 涿鹿县|