以下の 2 つの面Default.aspx と Result.aspx があります。
<!-- Default.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="ここに文字列を入力してください"></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
システムを使用する;
System.Data を使用します。
System.Configuration を使用します。
System.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)
{
}
}
<!-- Result.aspx -->
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Result.aspx.cs" Inherits="Result" Title="無題ページ" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Label ID="Label1" runat="server" Text="前のページで入力した文字列は次のとおりです"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:コンテンツ>
//結果.aspx.cs
システムを使用する;
System.Data を使用します。
System.Configuration を使用します。
System.Collections を使用します。
System.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;
}
}
}
Default.aspx には 2 つのコントロールがあります: TextBox1 はユーザーの入力を受け入れるために使用され、Button1 はインターフェイスを表示するために使用されます。 PostBackUrl は Result.aspx を指します。Result.aspx.cs の Page_Load メソッドで TextBox1 に、ユーザーが前のページの TextBox1 に入力した文字列が表示されます。以下の句を実行するとき:
TextBox tb = (TextBox)PreviousPage.FindControl( "テキストボックス1");
上記の内容は次のように変更されます。
Content con = (Content)PreviousPage.FindControl("Content1");
if (con == null)
戻る;
TextBox tb = (TextBox)con.FindControl("TextBox1");
ただし、con の値が null であるため、この後の句も実行できません
。解決済みの回答、以下の引用はビットマスクの例です:
...マスター ページがページを再配置すると、コンテンツ コントロール自体が消えてしまうためです。フォームと必要なコントロールの間に INamingContainers がない場合は、ContentPlaceHolders または MasterPage の <form> を使用できます。
以上の変更内容:
TextBox tb = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
bitmask も他の博客に書かれている一篇文章で、FindControl メソッドと INamingContainers インターフェイスについて説明しています。
http://www.odetocode.com/Articles/116.aspx