0

我的网站使用母版页,我在其中放置了两个控件,一个 TextBox 和一个 ImageButton,它们旨在在所有内容站点上查看和访问。这是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,它确实如此。

Result.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 中输入了值。随后的点击会正确显示值,例如“Value: SomeText”。

为什么价值不是第一次“出现”?

有没有更好的方法来确保这一点?

  • 访问者被重定向到 Result.aspx AND
  • 该值是“注册的”并且可以在 Result.aspx.cs 和
  • 如果在不使用图像按钮 PostBackURL 的情况下输入 Result.aspx,用户将被重定向

我已经尝试过 IsPostBack 但在使用母版页作为上一页时它的行为似乎很奇怪......

非常感谢您的回答!

真挚地,

凯先生

4

2 回答 2

1

如果您PostBackURL在母版页上的 ImageButton 上使用并且来自另一个页面,则必须使用:

PreviousPage.Master.FindControl("TextBox1") as TextBox;

如果您在PostBackURL页面上并单击 ImageButton,则需要使用

Master.FinControl("TextBox1") as TextBox;

(在这种情况下,PreviousPage 将为空)

你可以使用这样的东西:

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 在备注部分。

于 2012-08-17T13:57:15.730 回答
0

既然你知道你的表单是从主人那里派生的......你有没有尝试过显式类型转换来解决它???如

文本框 txbx = ((site.Master)this).Textbox1;

然后从那里做任何你想做的事情......自从我进入 asp.net 已经有一段时间了,但记得在我的一个旧应用程序中做类似的事情。

于 2012-08-17T11:30:26.747 回答