user544079
user544079

Reputation: 16639

cross page posting asp.net not returning values

I have a web form as

<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" />

Now on Page2.aspx the code-behind is as follows:

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

I end up getting the error object reference not set to instance of an object for txt1

Where label1 is a label used to display the output. However, the value is not displayed.

What step am i missing?

Upvotes: 0

Views: 1428

Answers (2)

Jobert Enamno
Jobert Enamno

Reputation: 4461

Try this

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;
            }

Upvotes: 1

Neil Thompson
Neil Thompson

Reputation: 6425

Are you sure that PostBackURL is valid on a Textbox? Normally this attribute is attached to something that submits, such as a Button or LinkButton, eg:

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

Edit: Aha! - you do use a button.

Your code looks OK to me.

If the TextBox is within another control FindControl might not find it - if (for example) it's within a Panel you would need to do something like

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

If it's not within another control then I'm afraid I don't know.

Upvotes: 0

Related Questions