使用Server.Transfer方法
    这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
a.aspx的C#代码
public string Name
{
    get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
    Server.Transfer("b.aspx");
}b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
    a newWeb;   //实例a窗体
    newWeb = (source)Context.Handler;
    string name;
    name = newWeb.Name;
}
在2005中,每个页的类,都没有命名空间。b.aspx得不到a.aspx的类。如何解决这个问题!
还有,类似这种两个页面,要共用一个对象,对这个对象进行付值或使用。如何来实现。有什么好办法!

解决方案 »

  1.   

    1.可以使用反射,但是这样的效率就不太好了.2.0里提供了一个对象,用于访问当前页的历史页,这或许对你有帮助,具体你可以看看2.0中的Page类.2.对于共对于共用的对象,可以独立出来,不需要放在页面中.
      

  2.   

    可以使用.NET2.0新的特性,http://msdn2.microsoft.com/zh-cn/library/ms178139(VS.80).aspx
      

  3.   

    默认情况下,ASP.NET 页中的按钮控件将回发至包含该按钮的相同页,可以在该页中为该回发编写事件处理程序。在大多数情况下,这是期望的行为,但有时您也希望能够发送到应用程序的其他页中。Server.Transfer 方法可用于在页间移动,但 URL 不会更改。而使用 ASP.NET 2.0 中的跨页发送功能可以向应用程序中的其他页激发正常回发。然后可在目标页中访问源页中启动回发的服务器控件的值。 若要使用跨页发送,可以设置 Button、LinkButton 或 ImageButton 控件的 PostBackUrl 属性,该属性指定目标页。然后可在目标页中访问 PreviousPage 属性,以从源页中检索值。默认情况下,PreviousPage 属性为 Page 类型,所以必须使用 FindControl 方法访问控件。也可启用对源页的强类型访问,方法是:在目标页中将 @PreviousPageType 指令设置为源页的虚拟路径或类型名称。注意,如果打算将多个页发送到单个目标页,则不能使用强类型访问器(保留不设置 PreviousPage 指令)。 
    跨页发送按以下方法工作: 
    跨页发送在页 1 中设置窗体操作 
    单击该按钮时,发送将从页 1 转至页 2 
    页 2 保留页 1 的视图状态 
    访问 PreviousPage 时,视图状态将重新填充为页 1 的实例 
    页 1 然后执行到 LoadComplete 阶段(呈现除外) 
    此时,页 2 可以访问页 1 中的控件值
    <--//CrossPagePostBack_cs.aspx//-->
    <script language="C#" runat="server">
      void Button1_Click(object sender, EventArgs e)
      {
        Label1.Text = "Hello " + TextBox1.Text + ", you selected " + Calendar1.SelectedDate;
      }
    </script>^^^^^^^^^^^^^
    <asp:TextBox ID="SearchTerm" runat="server" />
          <asp:Button ID="Button2" runat="server" Text="Search" PostBackUrl="Search_cs.aspx" /> 
    ^^^^^^^^^^^^^^<--//Search_cs.aspx//-->
    <script language="C#" runat="server">
      void Page_Load(object sender, EventArgs e)
      {
        TextBox SearchTerm;    SearchTerm = (TextBox)Page.PreviousPage.FindControl("SearchTerm");
        Label1.Text = SearchTerm.Text;
      }
    </script>
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     <asp:Label ID="Label1" runat="server" Text="Label" Font-Size="16pt" ForeColor="#FF0066"
            Font-Italic="True" />
    ^^^^^^^^^^^^^^^^
    由于执行页 1(至 LoadComplete)是为了响应跨页发送,当请求不是跨页发送而是对页 1 的正常请求时,有时需要仅执行该页中针对特定情形的代码。您可以使用页 1 中的 IsCrossPagePostBack 属性来处理这一情况。 

    if (!Page.IsCrossPagePostBack) 
    {
        // handle a normal request
    } 也可以回发至其他应用程序,但此时 PreviousPage 属性为空。也可以在代码中传输,同时使用 Server.Transfer(IHttpHandler, preserveViewState) 通过 PreviousPage 属性保留视图状态。