asp.net中跨页读取控件,公共属性,Form信息

来源:互联网 发布:崩坏学园2官方淘宝店 编辑:程序博客网 时间:2024/06/05 06:31

       读取源页面的信息
  ASP.NET 2.0中,Button控件有个新增的属性PostBackUrl,用来设置需要提交的目标页面。因为只要指定Button控件的PostBackUrl属性就可以提交到其它页面,我们可以在页面中使用多个控件配置其PostBackUrl的属性,提交到不同的页面。当然也可配置多个页面提交到同一个页面。
  在跨页面提交之后,通常我们需要从源页面中读取控件的信息(即由浏览器发送的信息),以及源页面的公共属性。
  读取控件的值
  ASP.NET 2.0的Page类新增了一个PreviousPage属性。顾名思义,目标页面中的这个属性包含对源页面的引用。这样就可以在目标页面中通过PreviousPage属性访问源页面的信息,我们一般使用FindControl方法来查找源页面上的控件并读取这些控件的值。下面的代码说明了该方法的使用:

if (Page.PreviousPage != null)
{
 TextBox txtName = (TextBox)Page.PreviousPage.FindControl("txtName");
 if (txtName != null)
 {
  Label1.Text = txtName.Text;
 }
}

  当我们想查找源页面中控件属于另一个控件或者是模板之中,就不能直接使用FindControl方法来读取它,而是应该先获取对该容器的引用,然后才能在该容器中查找要获取的控件。下面的例子中,FirstPage.aspx页面中包含一个Panel控件,其ID为MainPanel,它还包含ID为UserName的TextBox控件。具体代码如下:

Panel MainPanel = (Panel)PreviousPage.FindControl("MainPanel");
if (MainPanel != null)
{
 TextBox UserName = (TextBox)MainPanel.FindControl("UserName");
 if (UserName != null)
 {
  Label1.Text = UserName.Text;
 }
}
else
{
 Label1.Text = "Cannot find UserName control.";
}

       读取源页面的公共属性
  一旦在目标页面中获取了PreviousPage的引用,就能访问源页面中公共控件的属性,同样也可访问源页面中的公共属性。当然,我们需要预先在源页面中公开需要被访问的属性方可在目标页面中访问。
  若要获取源页面的公共成员,必须先获取对源页面的强类型引用。就像第一个例子中,我们可以使用@PreviousPageType指令来指定源页面,它有两个属性分别为:VirtualPath和TypeName。使用VirtualPath属性指定来源页的虚拟路径(包含文件名),也可以使用TypeName指定源页面的属性。注意只能指定其中的一个,两者都指定就会失效。如第一个例子中所示:

<%@ PreviousPageType VirtualPath="~/FirstPage.aspx" %>

  如果使用了@PreviousPageType指令,目标页面中的PreviousPage 属性被强类型化为源页面的类。因此,可以直接引用源页面的公共成员。要获取对源页面的强类型引用的另一种方法是在目标页面中包含一个@Reference 指令,就像引用要在页面中使用的其它任何类型一样。在这种情况下,你可以在目标页面中获取目标页面的PreviousPage属性并将其强制转换为源页面的类型,如下面的代码所示:

SourcePage_aspx sourcePage;
sourcePage = (SourcePage_aspx) PreviousPage;
Label1.Text = sourcePage.UserName;

  读取源页面中的Form信息
  如果源页面和目标页面属于同一个 ASP.NET 应用程序,则目标页中的PreviousPage属性包含对源页面的引用。在没有使用@PreviousPageType指令的情况下,目标页面中PreviousPage 属性类型化为Page。
  注意,如果该页不是跨页发送的目标页面或者目标页面位于不同的应用程序中,则不会初始化PreviousPage属性。
  如果源页面和目标页面属于不同的应用程序,甚至是不同的网站,那就无法直接获取源页面上控件的值,但可以从Request.Form中读取发送的数据。还有一个需要注意的问题,因为源页面的视图状态经过Hash处理,所以不能从源页面中读取视图状态。如果要在源页面中存储值并让这些值可供其他应用程序中的目标页使用,可以将这些值作为字符串存储在源页面的隐藏字段中,并在目标页面中通过 Request.Form 来访问它们。      判断是否为跨页面提交
  跨页面提交的时候,源页面控件的内容被提交到目标页面,然后浏览器执行POST操作(注意,不是GET)。在ASP.NET 1.x中由于页面都是自己提交给自己,可以通过Page的IsPostBack属性来判断是否为页面提交。但是在跨页面提交的时候,目标页面的IsPostBack属性为false。如果要判断是否为跨页面提交,可以对目标页面的PreviousPage属性返回的引用页面的IsCrossPagePostBack属性进行判断,如下面的代码所示:

if(PreviousPage != null)
{
 if(PreviousPage.IsCrossPagePostBack == true)
 {
  Label1.Text = "跨页面提交";
 }
}
else
{
 Label1.Text = "非跨页面提交";
}

  注意,如果当前页面不是跨页面提交的目标页面,则其PreviousPage属性为空。

原创粉丝点击