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.
Excellent post...
ReplyDeletevisit my blog asp.net example