我有一个母版(MyBoxx.Master)引用2个用户控件:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MyBoxx.master.cs" Inherits="MyBoxxMaster" %>
<%@ Register TagPrefix="uc1" TagName="Header" Src="Header.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Footer" Src="Footer.ascx" %>
我的用户控制“页眉”除其他外包含搜索框。 我想在访问一些网页时,隐藏这个搜索框。 所以我加了一个布尔属性,我的用户控制和使用该属性呈现在用户控件来定是否显示搜索框或没有时:
public partial class uxHeader : System.Web.UI.UserControl
{
bool _showSearch = true;
public bool ShowSearch
{
get { return _showSearch; }
set { _showSearch = value; }
}
[...]
protected void Page_Load(object sender, EventArgs e)
{
[...]
searchBox.Visible = _showSearch;
}
}
然后我尝试从内容页访问此“ShowSearch”属性:
((uxHeader)Page.Master.FindControl("Header1")).ShowSearch = false;
问题是我在尝试编译时出现以下错误:
Error 15 The type or namespace name 'uxHeader' could not be found (are you missing a using directive or an assembly reference?)
事情是我相信我得到它的工作,并在某些时候编译,因为它的工作原理基于先前发布的量产版。 但现在我正在做一个改变别人在同一站点东西,不能再编译。
从各个岗位上的话,我尝试添加以下行到我的内容页面的aspx:
<%@ MasterType VirtualPath="~/MyBoxx.master"%>
<%@ Reference VirtualPath="~/MyBoxx.master" %>
没有任何成功! 我也看到了有关的页面生命周期的某些答案,但因为我在编译时执行得到一个错误,而不是一个错误这不能在这里是问题。
如果任何人有我如何能解决这个问题的好任何意见,我会隆重升值。
谢谢 !
好吧,我发现了几个可行的解决方案...我想我明白如何/为什么它前面工作
1)似乎编译有一定的作用在这方面肩负重任。 如果我评论行,编译站点,然后尝试再次添加行,类型uxHeader“可用”在VS,我可以与行注释掉再次编译网站...
2)作为第一个解决方案显然不是一个长期的解决方案,我发现,引用用户控件(实际上并没有使用它,当然)在内容页面的aspx会做的伎俩:
<%@ Register TagPrefix="uc1" TagName="Header" Src="Header.ascx" %>
3)我也试过这个,我觉得最干净......在母版页,公开公共属性:
public uxHeader PageHeader
{
get
{
return Header1;//Header1 is the id of the userControl dropped in masterpage
}
}
在内容页ASPX,我然后把:
<%@ MasterType VirtualPath="~/DBoxx.master"%>
然后,仍然在内容页面,但在代码隐藏,并且该网站的编辑后,我可以使用:
this.Master.PageHeader.ShowSearch = false;
希望这将帮助那些寻求在未来的主题帮助。 我看到这是一个问题,复发性
根据您如何您的用户控件编码,你可能会或可能无法将其暴露于母版页的母版页属性时可以访问所有它的属性/方法..
这里是一个有效的解决方案:
在你的母版页,你需要注册用户控件(.ascx),并将其放置在表单标签内的主。
注册用户控制
<%@ Register Src="~/Controls/MyUserControl.ascx" TagPrefix="uc" TagName="MyUserControl" %>
用户控件添加到母版页
<form id="frmMain" runat="server">
<uc:MyUserControl runat="server" ID="ucMyUserControl" />
<div id="main-wrapper">
<div id="main">...
现在的内容页,你需要在每个使用母版页,而您要使用的控件中的内容页面的引用。
添加引用在内容页
<%@ Reference Control="~/Controls/MyUserControl.ascx" %>
现在,您可以设置在页面级别和访问它的属性/方法公共变量
部分类我的页面
Inherits System.Web.UI.Page Public usrCtrl As MyUserControl Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Master.FindControl("ucMyUserControl") IsNot Nothing Then usrCtrl = CType(Master.FindControl("ucMyUserControl"), MyUserControl) usrCtrl.ExecMyMethod() End If ...
文章来源: Get and cast Masterpage UserControl from Content Page to access specific UC Property