有以下两个页面Default.aspx eResult.aspx,代码如下:
<!-- Padrão.aspx -->
<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Default.master" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:Label ID="Label1" runat="server" Text="Insira uma string aqui"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Result.aspx" /></asp:Content>
//Default.aspx.cs
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
//usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
classe parcial pública _Default: System.Web.UI.Page
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
}
}
<!-- Resultado.aspx -->
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Result.aspx.cs" Inherits="Result" Title="Página sem título" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Servidor">
<asp:Label ID="Label1" runat="server" Text="A string inserida na página anterior é"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:Conteúdo>
//Resultado.aspx.cs
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Collections;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
Resultado da classe parcial pública: System.Web.UI.Page
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
if (Página Anterior! = Nulo)
{
TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
if (tb! = nulo)
TextBox1.Text = tb.Texto;
}
}
}
这两个页面都指定了MasterPageFile.控件:TextBox1用于接受用户的输入,Button1用于提交页面,其PostBackUrl指向Result.aspx. Atualizado:
TextBox tb = (TextBox)PreviousPage.FindControl( "TextBox1");
tb的值为null。将以上语句更改为如下代码:
Content con = (Content)PreviousPage.FindControl("Content1");
if (con == nulo)
retornar;
TextBox tb = (TextBox)con.FindControl("TextBox1");索
,
emforums.asp.net找到了答案, 以下引用的是bitmask的说法:
... porque os próprios controles de conteúdo desaparecem depois que a página mestra reorganiza a página. Você pode usar ContentPlaceHolders ou <form> na MasterPage se não houver INamingContainers entre o formulário e o controle necessário.
所以以上的代码应该改成:
TextBox tb = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
bitmask还在他的博客上写了一篇文章来阐述FindControl方法和INamingContainers接口:
http://www.odetocode.com/Articles/116.aspx