跨页发布asp.net没有返回值

时间:2013-01-17 05:49:49

标签: c# asp.net

我有一个网页表格

<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是用于显示输出的标签。但是,该值不会显示。

我缺少哪一步?

2 个答案:

答案 0 :(得分: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;
            }

答案 1 :(得分: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");

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