在母版页中查找控件,第一次单击会生成空字符串



我的网站使用母版页,其中放置了两个控件,一个文本框和一个图像按钮,它们旨在在所有内容网站上查看和访问。下面是 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 以来已经有一段时间了,但记得在我的一个旧应用程序中做了类似的事情。

相关内容

最新更新