0

私は次のようなWebフォームを持っています

<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 に答える