9

在一个站点上,我只使用单级母版页,并且在使用该母版的页面中,我可以执行 this.Master.FindControl("controlName") 来访问控件。工作正常。

但是,在具有两个母版页级别的站点上使用相同的代码。MainMaster 和 SpecificMaster 以 MainMaster 作为其 Master。

因此,在使用 SpecificMaster 的页面上,FindControl 为该对象返回 null。我看到的唯一区别是母版页的嵌套。

当我设置断点并查看 page.Master 时,它显示 SpecificMaster 和 SpecificMaster 正确地将 MainMaster 显示为其主控,但 FindControl 仍然失败。

当我在 IE 中查看源代码时,控件被正确命名,没有 .NET 运行。

这里有什么想法吗?

蒂亚!

4

7 回答 7

21

当您嵌套母版页时,您将获得一个需要查看的额外容器“内容”。

因此,如果您尝试从给定的子页面使用 FindControl,通常的方法是:

Label myLabel = (Label)this.Master.FindControl("myLabel");
myLabel.Text = "Success!";

由于我们有一个嵌套母版页,子母版中有“myLabel”,因此该控件将包含在内容控件中。

因此,这将代码更改为:

ContentPlaceHolder ph = (ContentPlaceHolder)this.Master.Master.FindControl("yourContentPane");

Label myLabel = (Label)ph.FindControl("myLabel");
myLabel.Text = "Success!";

VB.NET中

Dim ph As ContentPlaceHolder = DirectCast(Me.Master.Master.FindControl("yourContentPane"), ContentPlaceHolder)

Dim myLabel As Label = DirectCast(ph.FindControl("myLabel"), Label)
myLabel.Text = "Success!"

子页面中的内容被加载到第一个母版页控件中,该控件随后被加载到祖父母版页中。

于 2009-10-16T14:36:04.463 回答
3

你试过this.Master.Master.FindControl("controlname");吗?

于 2009-10-16T14:01:42.177 回答
0

它也适用于跨页面回发:

ContentPlaceHolder ph = (ContentPlaceHolder)PreviousPage.Master.FindControl("ContentPlaceHolder");

字符串 txt = ((TextBox)(ph.FindControl("UserTextBox"))).Text;

于 2010-04-29T13:50:13.727 回答
0

我通常这样做:</p>

(TextBox)this.Master.FindControl("ContentplaceHolder1").FindControl("TextBox1");
于 2011-07-25T16:24:26.487 回答
0
HyperLink hl = (HyperLink)Master.Master.FindControl("HyperLink3");

这是从嵌套母版页中查找控件的最简单方法。

于 2013-02-07T02:50:20.523 回答
0

我的情况如下。不确定此设置是否正确,但它允许我进行主从页面设置,并能够找到控制权。

MasterPage-> SubMasterPage -> ASPX 页面

母版页:

<asp:ContentPlaceHolder ID="MasterPageContentPlaceHolder" runat="server">
</asp:ContentPlaceHolder>

子母版页:

<asp:Content ID="ModuleMainContent" ContentPlaceHolderID="MasterPageContentPlaceHolder" runat="server">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>

ASPX.cs:

ContentPlaceHolder MainContent = (ContentPlaceHolder)this.Master.Master.FindControl("MasterPageContentPlaceHolder").FindControl("MainContent");
    TextBox var_type = MainContent.FindControl("air") as TextBox;
于 2016-03-09T11:50:53.487 回答
0

试试这个

    string txt = ((TextBox)this.Master.FindControl("ContentIDName").FindControl("TextBox1")).Text;
于 2020-02-18T15:26:03.560 回答