我在我的模板页面上放了一个用户控件,比如Test.aspx
<site:Control1 runat="server" id="Bigbox" AdType="bigbox" AdTile="1" ServeOop="True"/>
在Control1背后的代码中,它试图找到另一个放在母版页上的用户控件。
if (this.Page.Master.FindControl("Control2") != null),
现在,我们设计网站的方式是模板页面调用是一个调用另一个母版页的母版页,我的意思是这个
在Test.aspx中,它有
MasterPageFile="~/Views/CMSTemplates/Shows/Show.master"
在Show.master中,它有
MasterPageFile="~/Views/CMSTemplates/Wrapper.master"
在Wrapper.master中,它有"~/Views/CMSTemplates/Site.master"
现在,site.master是根级别的母版页,所有模板都引用了它。
但是当我把Control2放在site.master上时
<site:Control2 runat="server" id="Control2"/>,
if(this.Page.Master.FindControl(“Control2”)返回null。我明白因为Site.Master是Test.aspx的几个级别,所以我尝试将Control2放在Show.master上 Wrapper.master,Control1仍然无法找到Control2。
我甚至试图放置@masterType指令,仍然无法正常工作
有任何想法或建议吗?
请告知。
由于
答案 0 :(得分:2)
您需要按ID查找控件,而不是类名:
if (this.Page.Master.FindControl("DfpAdManager") != null)
或使用OfType
:
this.Page.Master.Controls.OfType<Control2>()
答案 1 :(得分:0)
您还可以尝试检查或搜索来自Page.Master.Parent的控件,具体取决于您正在搜索控件的层次结构中的位置,以及您从中执行FindControl()的位置。 你可以去Page.Master.Parent.Parent。等等,如果需要的话。
答案 2 :(得分:0)
我在模板页面上使用了&lt; @mastertype引用。我使用Page.Master.Master上链并找到控件