AddThis Social Bookmark Button

Print

Managing ASP.NET Navigation
Pages: 1, 2

Server.Execute

The Server.Execute method allows the current ASPX page to execute a specified ASPX page on the same web server. After the specified ASPX page is executed, the control transfers back to the original page from which the Server.Execute method was called. This technique of page navigation is analogous to making a function call to an ASPX page. The called ASPX page has access to the form and query string collections of the calling page, and thus you need to set the EnableViewStateMac attribute of the Page directive to False on the executed page.



By default, the output of the executed page is added to the current response stream. This method also has an overloaded version in which the output of the redirected page can be fetched in a TextWriter object (or one of its children, such as a StringWriter object) instead of added directly to the response stream. This helps you to control where to place the output in the original page.

To see how this works, create a Web Form in a test ASP.NET application and place a Button control (Button1) and a Literal control (Literal1) on the Web Form. Switch to code view and add an Imports statement for the System.IO namespace. Then add code to execute when the user clicks the button:

Private Sub Button1_Click( _
 ByVal sender As System.Object, _
 ByVal e As System.EventArgs) _
 Handles Button1.Click
    Dim sw As StringWriter = New StringWriter()
    Server.Execute("WebForm2.aspx", sw)
    Literal1.Text = sw.ToString()
End Sub

Now create a second Web Form in the same application, WebForm2.aspx. Switch to the HTML view of this second Web Form and modify its Page directive to disable ViewState checking:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
  Inherits="Navigate.WebForm2" EnableViewStateMac="false"%>

Switch back to design view and add some controls to the second Web Form. Now set the first Web Form as the default page and start the application. Click the button, and the controls from WebForm2 will be displayed in the area of WebForm1 where you placed the Literal control, as shown in Figure 1. You'll note from the URL and page title that the browser is still displaying WebForm1.

Screen shot.
Figure 1: A page in the browser composed by using Server.Execute to combine two source files.

There's one more thing to be aware of when you use the Server.Transfer or Server.Execute methods to navigate: the ultimate page may not be valid HTML. That's because the response to the client will contain multiple <html> and <body> tags, among other tags. Internet Explorer seems to tolerate this situation just fine, but you may want to test the results carefully if your users prefer a different browser.

Decisions, Decisions

So, given these choices for navigating from page to page, how do you select the appropriate one for your application? Here are some things to think about:

  • Hyperlinks are appropriate when you want the end user to control when navigation is performed, or to choose where to go.

  • To control the user's destination, but let them decide when to get there, use a Web Server HyperLink control whose NavigateUrl property is dynamically set.

  • Use Response.Redirect to connect to resources outside of the web server where your page is hosted.

  • Use Response.Redirect to connect to non-ASPX resources such as HTML pages.

  • Use Response.Redirect if you need to preserve a query string as an explicit part of the URL.

  • When you want to transfer control to an ASPX page residing on the same web server, you should use Server.Transfer instead of Response.Redirect because Server.Transfer will avoid the unnecessary round trip and provide better performance and a better user experience.

  • To capture the output from an ASPX page and display it at a specified location on another ASPX page, use Server.Execute.

  • If valid HTML output is essential, use Response.Redirect instead of either the Server.Transfer or Server.Execute methods.

Mike Gunderloy is the lead developer for Larkware and author of numerous books and articles on programming topics.


Return to ONDotNet.com.