[代码]获取源页的控件值

重点总结
在ASP.NET中,要想从目标页获取源页的数据信息,可以使用两种方法
一是通过获取源页的控件进而获取控件的属性值。
二是直接通过获取源页公开的公共属性来获取源页数据。

本示例代码则演示如何通过获取源页的控件达到获取源页数据的目的。
这也分两种情况:一种是获取源页上的控件,还有一种是获取源页中控件的控件。
无论是那种情况,都需要使用到目标页的Page.PreviousPage属性,通过此属性就可以获取到源页的引用了。
然后通过调用页的FindControl()方法来获取页上的控件,或者调用控件的FindControl()来获取控件内部的控件。
需要注意的是,无论是通过Page.PreviousPage属性获取源页引用,还是通过FindControl()来查找所需的控件,都有可能出现null的情况。
所以,在进一步使用这些对象之前应该确保其不是null,否则肯定是会出错的。

一、获取的是源页上的控件

示例代码
在这个示例代码中,源页有一个名为UserNameTextBox的TextBox控件,用户可以在这个控件中输入自己的姓名,然后单击【提交到目标页】按钮,源页就会被发送到目标页DestinationPage.aspx。在目标页的代码中,通过Page.PreviousPage属性获取源页的引用,然后通过FindControl()找到UserNameTextBox控件,进而通过此控件的Text属性获取用户在源页输入的姓名。代码如下:
源页的代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SourcePage1.aspx.cs" Inherits="SourcePage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="UserNameTextBox" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="SubmitButton" runat="server" Text="提交到目标页"
            PostBackUrl="~/DestinationPage.aspx" />
    </div>
    </form>
</body>
</html>

下面是目标页获取源页数据的代码:

if (this.PreviousPage != null)
{
    TextBox UserNameTextBox =
        (TextBox)this.PreviousPage.FindControl("UserNameTextBox");
    if (UserNameTextBox != null)
    {
        this.Response.Write(string.Format(
            "{0}, Welcome you to the ASP.NET 4 World!",
            UserNameTextBox.Text));
    }
}

测试上面的代码你就会发现,已经而已正确的从目标页获取用户在源页当中输入的用户名了。^_^


二、获取的是源页控件中的控件

重点说明
这种情况比前面的情况稍微麻烦一点,但是也不至于困难到让人望而生畏的地步。
简单的说,就是首先获取包含控件的容器控件,然后再通过容器控件的FindControl()方法进一步获取所需要的控件。
如果,控件是在容器控件中的容器控件中呢?
道理是一样的,继续找容器控件中的容器控件,直到找到了包含控件的上一级容器控件,然后再FindControl()它出来就行了。

示例代码
本示例代码中,我们要找的是页面的Login控件中的用来输入用户名的文本框控件。这个控件的ID是UserName。首先我们通过调用Page.PreviousPage.FindControl()来找到Login控件,然后再调用Login.FindControl()进一步找到文本框控件。
下面是源页中的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SourcePage2.aspx.cs" Inherits="SourcePage2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Login ID="UserLogin" runat="server">
        </asp:Login>
        <asp:Button ID="SubmitButton" runat="server" Text="提交到目标页"
            PostBackUrl="~/DestinationPage.aspx" />
    </div>
    </form>
</body>
</html>

目标页中获取用户名的代码如下:

if (this.PreviousPage != null)
{
    Login UserLogin = (Login)this.PreviousPage.FindControl("UserLogin");
    if (UserLogin != null)
    {
        TextBox UserNameTextBox = (TextBox)UserLogin.FindControl("UserName");
        if (UserNameTextBox != null)
        {
            this.Response.Write(string.Format(
                "{0}, Welcome you to the ASP.NET 4 World!",
                UserNameTextBox.Text));
        }
    }
}


测试一下,看看是不是已经正确的获取了源页中的用户名呢?

原文地址:https://www.cnblogs.com/GJYSK/p/1868376.html