我的网站使用母版页,其中放置了两个控件,一个文本框和一个图像按钮,它们旨在在所有内容网站上查看和访问。下面是 Site.Master 中的 aspx 代码:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageBtn" runat="server" ImageUrl="~/Image.png"
PostBackUrl="~/Result.aspx"></asp:ImageButton>
单击该按钮应将访问者重定向到 Result.aspx,它确实如此。
结果.aspx.cs在Page_Load事件中具有以下内容:
protected void Page_Load(object sender, EventArgs e)
{
TextBox txbx = this.Master.FindControl("TextBox1") as TextBox;
if (txbx != null)
{
Label1.Text = "Value: " + txbx.Text;
}
else
{
Label1.Text = "TextBox seems to be null";
}
}
第一次单击图像按钮时会出现奇怪的行为。访问者从页面"值:"(即空字符串")获取此信息,即使在 TextBox1 中输入了值也是如此。随后的点击会正确显示值,例如"值:某些文本"。
为什么第一次没有"出现"这个值?
有没有更好的方法来确保这一点?
- 访客被重定向到结果.aspx和
- 该值已"注册"并且可以在结果中处理.aspx.cs和
- 用户将被重定向,如果 Result.aspx 是在不使用图像按钮的情况下输入的 PostBackURL
我已经尝试过 IsPostBack,但在将母版页用作上一页时,它的行为似乎很奇怪......
非常感谢您的回答!
真诚地
凯先生
如果在母版页上的 ImageButton 上使用PostBackURL
并且来自另一个页面,则必须使用:
PreviousPage.Master.FindControl("TextBox1") as TextBox;
如果您在PostBackURL
页面上并单击您的图像按钮,则需要使用
Master.FinControl("TextBox1") as TextBox;
(在这种情况下,上一页将为空)
你可以使用这样的东西:
var txbx = PreviousPage == null ?
Master.FindControl("TextBox1") as TextBox :
PreviousPage.Master.FindControl("TextBox1") as TextBox;
参见:http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage(v=vs.100).aspx在"备注"部分。
既然你知道你的形式是从主人那里派生出来的......您是否尝试过显式类型转换来解决这个问题??? 如
文本框 txbx = ((站点。师父)这个)。文本框1;
然后从那里做任何你想做的事情... 自从我进入 asp.net 以来已经有一段时间了,但记得在我的一个旧应用程序中做了类似的事情。