0

我有一个网络表单

<asp:TextBox ID="txtname" runat="server" Text="Post on Next Page"/>
<asp:Button ID="btn1" runat="server" PostBackUrl="~/Page2.aspx" Text="Post on next page" />

现在Page2.aspx代码隐藏如下:

protected void Page_Load(object sender, EventArgs e)
{
   if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack)
   {
       TextBox txt1 = (TextBox)PreviousPage.FindControl("txtname");
       label1.Text = "Value: " + txt1.Text;
   }
}

我最终得到了object reference not set to instance of an object错误txt1

label1用于显示输出的标签在哪里。但是,不显示该值。

我错过了什么步骤?

4

2 回答 2

1

试试这个

if (PreviousPage != null && PreviousPage.IsCrossPagePostBack)
            {
                //get the content place holder from master page of your previous page where your controls are placed
                //In this code the txtname textbox is placed inside ContentPlaceHolderID="MainContent"
                var cp =PreviousPage.Master.FindControl("MainContent") as ContentPlaceHolder;
                //find the textbox inside content place holder from previous page
                TextBox txt1 = cp.FindControl("txtname") as TextBox;
                label1.Text = "Value: " + txt1.Text;
            }
于 2013-01-18T01:29:05.097 回答
0

您确定 PostBackURL 在文本框上有效吗?通常,此属性附加到提交的内容,例如 Button 或 LinkBut​​ton,例如:

<form runat="server">
  Name:<asp:textbox id="TextBox1" runat=Server />
  <asp:button id="Button1" Text="Submit"
  PostBackUrl="demo_postbackurl.aspx" runat="Server" />
</form>

编辑:啊哈!- 你确实使用了一个按钮。

你的代码对我来说看起来不错。

如果 TextBox 在另一个控件中 FindControl 可能找不到它 - 如果(例如)它在 Panel 中,您需要执行类似的操作

TextBox txt1 = (TextBox)PreviousPage.MyPanel.FindControl("txtname");

如果它不在另一个控制范围内,那么恐怕我不知道。

于 2013-01-17T09:16:24.030 回答