มี以下两个页เลดี้Default.aspxและResult.aspx,代码如下:
<!-- Default.aspx -->
<%@ ภาษาเพจ = "C#" AutoEventWireup = "true" MasterPageFile = "~/Default.master" CodeFile = "Default.aspx.cs" สืบทอด = "_Default" %>
<asp:Content ID = "Content1" runat = "เซิร์ฟเวอร์" ContentPlaceHolderID = "ContentPlaceHolder1">
<asp:Label ID="Label1" runat="server" Text="Please input a string here"></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.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
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
-
-
<!--ผลลัพธ์.aspx -->
<%@ ภาษาเพจ = "C#" MasterPageFile = "~/Default.master" AutoEventWireup = "true" CodeFile = "Result.aspx.cs" สืบทอด = "ผลลัพธ์" Title = "เพจที่ไม่มีชื่อ" %>
<asp:Content ID = "Content1" ContentPlaceHolderID = "ContentPlaceHolder1" Runat = "เซิร์ฟเวอร์">
<asp:Label ID="Label1" runat="server" Text="สตริงที่คุณป้อนในหน้าก่อนหน้าคือ"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:เนื้อหา>
//ผลลัพธ์.aspx.cs
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ 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
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
ถ้า (หน้าก่อนหน้า != null)
-
กล่องข้อความ tb = (กล่องข้อความ)PreviousPage.FindControl("TextBox1");
ถ้า (tb != null)
TextBox1.Text = tb.Text;
-
-
-
这两个页的都指定了MasterPageFile属性。因为该MasterPage中的内容无关紧要,就不列出来了。的Default.aspx上有两个控件:TextBox1用于接受用户的输入,Button1用于提交页เลดี้,其PostBackUrlผล.aspx。ในResult.aspx.csของPage_Load方法中尝试在TextBox1中显示用户在前一页的TextBox1中输入的字符串。当执行以下语句时:
TextBox t b = (กล่องข้อความ)PreviousPage.FindControl( "กล่องข้อความ1");
tb ไม่มีค่าnull。
เนื้อหา con = (Content)PreviousPage.FindControl("Content1");
ถ้า (แย้ง == โมฆะ)
กลับ;
TextBox tb = (TextBox)con.FindControl("TextBox1");
但con ว่างเปล่า, 这样后续的语句也不可能执行了。问题出在哪里呢?
经过一番搜索,Forums.asp.net中找到了答案,以下引用的是bitmask的说法:
...เนื่องจากเนื้อหาควบคุมตัวเองหายไปหลังจากที่หน้าหลักจัดเรียงหน้าใหม่ คุณสามารถใช้ ContentPlaceHolders หรือ <form> บน MasterPage ได้ หากไม่มี InamingContainers อยู่ระหว่างแบบฟอร์มและส่วนควบคุมที่คุณต้องการ
ลิงก์ที่เกี่ยวข้อง:
TextBox tb = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
bitmask อยู่ที่ด้านบนสุดของคำสั่ง FindControl และ INamingContainers
http://www.odetocode.com/Articles/116.aspx