gpt4 book ai didi

c# - 从具有嵌套母版页的内容页访问控件

转载 作者:行者123 更新时间:2023-11-30 22:32:18 24 4
gpt4 key购买 nike

我真的很纠结这个。问题仅出在内容页面上。
我正在尝试从一个内容页面(“Page1.aspx”)访问另一个内容页面(“Page2.aspx”)中的文本框值。我不确定它们是嵌套母版页的子项是否相关,但我想我会把它放进去。

Page1.aspx 是一个带有文本框和提交按钮的基本表单。 Page1.aspx 中的文本框称为“tbFirst”。提交按钮具有以下代码:

<asp:Button ID="Button1" runat="server" Text="New Member Form" PostBackUrl="Page2.aspx"/>    

Page2.aspx 是一个新表单,应该使用上一页的文本框值进行填充。第二行显示 <%@ PreviousPageType VirtualPath="~/Page1.aspx"%>
出于测试目的,我使用标签(“lblResult”)来显示我的结果。

代码隐藏看起来像这样:

        if (PreviousPage != null)
{
TextBox SourceTextBox =
(TextBox)PreviousPage.FindControl("tbFirst");
if (SourceTextBox != null)
{
lblResult.Text = SourceTextBox.Text;
}
else
{
lblResult.Text = "No text found";
}
}
else
{
lblResult.Text = "No Control found";
}
}
}

问题是 Page2.aspx 中的标签文本显示“找不到文本”。

我认为这就是所有相关信息。有人有什么想法吗?我整个下午都在浏览论坛,但我尝试过的任何东西都不起作用。

最佳答案

I'm not sure whether it is relevant that they are the children of nested master pages, but I thought I'd throw it in.

MasterPage 正是导致此问题的原因。您无法使用 Page.FindControl("ControlID") 在包含 MasterPage 的页面上找到控件,因为该页面不是 NamingContainer TextBox 但ContentPlaceholder。页面的 ControlCollection 中唯一带有 MasterPage 的控件是 MasterPage 本身。

原因:我最近answered a question that describes this behaviour .

以下是从 Page2 访问 TextBox 的一些方法:

  1. 您可能会幸运地采用以下方法(最直接的 FindControl 方式):

    Page.Master.FindControl("ContentPlaceHolder1").FindControl("tbFirst");
  2. 另一种更好的方法是在 Page1 中提供一个返回 tbFirst.Text 的公共(public)属性。然后您可以通过以下方式从 Page2 访问它:

    if (PreviousPage != null && PreviousPage is Page1){
    lblResult.Text = ((Page1)PreviousPage).TbFirstText;
    }
  3. 您还可以添加 Text 作为 URL 参数,这样就不需要 Page2 的 PreviousPage第1页.

  4. 最后但并非最不重要的一点。如果你使用 Server.TranserpreserveForm 设置为 tue,您将能够通过引用 Request.Form("TbFirst") 检索原始页面 TextBox 控件的值>.

注意:我不推荐 recursive FindControl方法(从 MasterPage 开始),因为它也将硬连接两个页面并且将是

  • 严重错误的原因
  • 不透明

关于c# - 从具有嵌套母版页的内容页访问控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com