ASP.Net 1.1 provides for web forms
posting back only to themselves. In many situations, the solution requires
posting to a different web page. The traditional workaround alternatives were to
use Response.Redirect and/or Server.Transfer to move to a different page and
simulate cross page post-back behavior.
ASP.Net 2.0 provides a feature
known as Cross Page PostBack for a web form to post-back to a different web form
(other than itself)
How to post to a different
page
To set a web form to post back to a
different web form, in the source web form, set the PostBackURL property of a
control that implements IButtonControl (eg. Button, ImageButton, LinkButton) to
the target web form. When the user clicks on this button control, the web form
is cross-posted to the target web form. No other settings or code is required in
the source web form.
Access source page info within the
posted page: FindControl Method
The target web form resulting from
the cross-page postback provides a non-null PreviousPage property. This property
represents the source page and provides reference to the source web form and its
controls.
The controls on the source page can
be accessed via the FindControl method on the object returned by the
PreviousPage property of the target page.
protected
void Page_Load(object sender, EventArgs e)
{
...
TextBox txtStartDate =
(TextBox) PreviousPage.FindControl("txtStartDate ");
...
}
At this point the target page does
not have any knowledge of the source page. The PreviousPage property is of the
type Page. For accessing controls using FindControl, the developer has to
presume a certain structure in the source web form. This approach using
FindControl has a few limitations. FindControl is dependent on the developer to
provide the ids of the controls to access. The code will stop working if the
control id is changed in the source web form. The FindControl method can
retrieve controls only within the current container. If you need to access a
control within another control, you need to first get a reference to the parent
control.
Access source page info within the
posted page: @PreviousPageType Directive
There is another more direct option
to get access to the source page controls if the source page is pre-determined.
The @PreviousPageType directive can be used in the target page to strongly type
the source page. The directive specifies the source page using either the
VirtualPath attribute or the TypeName attribute. The PreviousPage property then
returns a strongly typed reference to the source page. It allows access to the
public properties of the source page.
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.
Access source page info within the
posted page: @Reference Directive
A third option to access the source
page in a strongly typed fashion from the target page is to include an
@Reference directive to the source page in the target page and then cast the
PreviousPage property to the type of the source
page.
Detect Cross Page PostBacks:
IsCrossPagePostBack Property
When the source page cross-posts
back to the target page, and the target page accesses the source page, the
source page is reloaded in memory and goes through all the life cycle stages
except the rendering. This version of the source page object is used by the
target page to access information on the source page.
The IsCrossPagePostBack property in
the source page indicates if it is being reloaded in memory in response to a
PreviousPage reference from a target page.
- Page A cross postback to
Page B
- Page B accesses the
PreviousPage : Page A is reloaded in memory and the IsCrossPostBack property on
this object has the value "true".
The IsCrossPagePostBack property can be
used in the source page to prevent
un-necessary processing from repeating when the page is being reloaded for the
PreviousPage reference.
The PreviousPage.IsCrossPagePostBack
property can be used to deduce if the current page has been loaded as a result
of a cross page postback.
Validations
If the Source Page has any
Validator controls, the source page will need to have valid input when it has
cross posted to the target page. The target page can contain the validation
check for PreviousPage.IsValid to
catch invalid submissions to the source page.
Usage
Scenarios
Previous limitations restricted the
postback to the self page in ASP.Net 1.1. In ASP.Net 2.0, you can use cross-page
post backs to post to a different web page, resulting in more intuitive,
structured and maintainable code.
Example - A web form collects
criteria for a web-based report (such as Report Type, Report Start Date and
Report End Date) and the form is cross page posted to another web form which
generates the report based on the parameters passed in the previous
page.
A typical use for cross page
postback is where you need a page to post to different pages by clicking on
different button controls in the same form. The target page is specified with
each button control, allowing postbacks to various
forms.
When posting across applications,
cross page postbacks allow access to the posted form data, but do not provide
access to the source page's controls and viewstate.
References
Note:
This
article is for purely educational purposes and is a compilation of notes,
material and understanding on this subject. Any resemblance to other material is
an un-intentional coincidence and should not be misconstrued as malicious,
slanderous, or any anything else hereof.