我有一个网页表格
<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
是用于显示输出的标签。但是,该值不会显示。
我缺少哪一步?
答案 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或LinkButton,例如:
<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");
如果它不在另一个控制范围内,那我恐怕不知道。