Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。     这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。     默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。     为说明其工作过程,下面我们创建一个Web表单,放入一个按钮控件(Button1)和一个文本控件(Literal1),在设计界面中转入代码视图,加入一个System.IO名称空间的Imports语句,然后加入用户点击按钮时执行的代码:   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   
     然后为同一个Web应用创建第二个页面WebForm2.aspx。转入该页面的HTML视图,修改其Page指令禁止ViewState检查:   <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"   
  Inherits="Navigate.WebForm2" EnableViewStateMac="false"%>   
     再转到设计视图,为第二个页面增加一些控件。接下来,把第一个页面设置成默认页面,启动应用。点击按钮,WebForm2的控件将显示在WebForm1中放置Literal按钮的地方,如图一,注意页面标题和URL仍旧显示原始页面WebForm1。   
   用Server.Execute方法实现导航时,还要注意一点:最后得到的页面可能不是合法的HTML页面,因为最终返回给客户端的页面可能包含多个<HTML>和<BODY>等标记。IE浏览器看来能够容忍并正确处理这类情形,但如果用户要用到其他的浏览器,最好仔细测试一下。

解决方案 »

  1.   

    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWebHttpServerUtilityClassExecuteTopic.htm  .NET Framework 类库   HttpServerUtility.Execute 方法  [C#]请参见
    HttpServerUtility 类 | HttpServerUtility 成员 | System.Web 命名空间 | C++ 托管扩展编程 
    语言
    C#C++JScriptVisual Basic全部显示
    使用另一页执行当前请求。重载列表
    使用指定 URL 路径处的另一页执行当前请求。[Visual Basic] Overloads Public Sub Execute(String)
    [C#] public void Execute(string);
    [C++] public: void Execute(String*);
    [JScript] public function Execute(String);
    使用指定 URL 位置的另一页执行当前请求。TextWriter 捕获该页的输出。[Visual Basic] Overloads Public Sub Execute(String, TextWriter)
    [C#] public void Execute(string, TextWriter);
    [C++] public: void Execute(String*, TextWriter*);
    [JScript] public function Execute(String, TextWriter);
    示例
    [Visual Basic, C#, JScript] 下面的示例在当前目录下执行服务器上的 aspx 页“Login.aspx”,并通过 StringWriter 对象 writer 接收该页的输出。它将从 writer 接收的 HTML 流写入 HTTP 输出流。[Visual Basic, C#, JScript] 注意   此示例显示如何使用 Execute 的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
    [Visual Basic] 
    Dim writer As New StringWriter
    Server.Execute("Login.aspx", writer)
    Response.Write("<H3>Please Login:</H3><br>" & writer.ToString())[C#] 
    StringWriter writer = new StringWriter();
    Server.Execute("Login.aspx", writer);
    Response.Write("<H3>Please Login:</H3><br>"+ writer.ToString());[JScript] 
    var writer : StringWriter = new StringWriter()
    Server.Execute("Login.aspx", writer)
    Response.Write("<H3>Please Login:</H3><br>" + writer.ToString())[C++] 没有可用于 C++ 的示例。若要查看 Visual Basic、C# 或 JScript 示例,请单击页左上角的“语言筛选器”按钮 。请参见
    HttpServerUtility 类 | HttpServerUtility 成员 | System.Web 命名空间 | C++ 托管扩展编程 
    --------------------------------------------------------------------------------发送有关此主题的意见 &copy; 2001-2002 Microsoft Corporation。保留所有权利。