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

标签 c# asp.net

我真的很苦恼这个问题。问题仅出在内容页面。
我正在尝试从一个内容页(“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/

相关文章:

c# - 没有为类型定义无参数构造函数.. Ajax JQuery 调用时出错

c# - 如何在 .NET 中修复 'Authentication to host for user using method ' mysql_native_password' failed with message : Reading from the stream has failed.'

c# - 使用触发器记录审计信息与存储过程

c# - 通过 Task Scheduler 的 Entity Framework 连接作为 NTAuthority/Anonymous Logon 连接

c# - 从另一个窗体刷新Form1 dataGrid c# winform

c# - C# AccessViolation/Marshalling 中的 native C-DLL

c# - 无法将属性或索引器 'System.DateTime.TimeOfDay' 分配给 — 它是只读的

c# - 使用两次时中继器错误

javascript - 显示加载程序直到整个页面在 asp.net 中完全加载

javascript - ASP 语句中的多个 "