有以下两个页面Default.aspx和Result.aspx,代码如下:
<%@ 页面语言="C#" AutoEventWireup="true" MasterPageFile="~/Default.master" CodeFile="Default.aspx.cs" Inherits="_Default" %>
//Default.aspx.cs
使用系统;
使用系统数据;
使用系统配置;
使用系统.Web;
使用 System.Web.Security;
使用 System.Web.UI;
使用 System.Web.UI.WebControls;
//使用System.Web.UI.WebControls.WebParts;
使用 System.Web.UI.HtmlControls;
公共部分类 _Default :System.Web.UI.Page
{
protected void Page_Load(对象发送者,EventArgs e)
{
}
}
<%@ 页面语言="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Result.aspx.cs" Inherits="结果" Title="无标题页面" %>
//结果.aspx.cs
使用系统;
使用系统数据;
使用系统配置;
使用系统集合;
使用系统.Web;
使用 System.Web.Security;
使用 System.Web.UI;
使用 System.Web.UI.WebControls;
使用 System.Web.UI.WebControls.WebParts;
使用 System.Web.UI.HtmlControls;
公共部分类结果:System.Web.UI.Page
{
protected void Page_Load(对象发送者,EventArgs e)
{
if (上一页!= null)
{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
if (tb!= null)
TextBox1.Text = tb.Text;
}
}
}
这个属性页面都指定了MasterPageFile两个。因为该MasterPage中的内容无关紧要,还没上市来了。在Default.aspx上有两个控件:TextBox1用于接受用户的输入,Button1用于提交页面,其PostBackUrl指向Result.aspx。在Result.aspx.cs的Page_Load方法中尝试在TextBox1中显示用户在前一页的TextBox1中输入的字符串。当执行以下语句时:
TextBox tb = (TextBox)PreviousPage.FindControl( “文本框1”);
tb的值为null。将以上语句更改为如下代码:
Content con = (Content)PreviousPage.FindControl("Content1");
如果(con == null)
返回;
TextBox tb = (TextBox)con.FindControl("TextBox1");
但是con的值为null,这样后续的语句也不可能执行了。问题出在哪里呢?
经过一番搜索,在forums.asp.net中找到了答案,以下引用的是位掩码的说法:
...因为在母版页重新排列页面后,内容控件本身就会消失。如果表单和您需要的控件之间没有 INamingContainers,则可以使用 ContentPlaceHolders 或 MasterPage 上的