可以从内容页面访问母版页的元素吗?
假设我有从 MasterPage1 继承的 MasterPage1 和 ContentPage1,而 MasterPage1 有一个按钮:Button1。
我可以从内容页面更改该按钮的属性,例如使 Button1 不可见、不活动等吗?我怎样才能做到这一点?
我正在使用.net2.0
可以从内容页面访问母版页的元素吗?
假设我有从 MasterPage1 继承的 MasterPage1 和 ContentPage1,而 MasterPage1 有一个按钮:Button1。
我可以从内容页面更改该按钮的属性,例如使 Button1 不可见、不活动等吗?我怎样才能做到这一点?
我正在使用.net2.0
是的...如果您需要使用 MasterPage 从 aspx 页面执行此操作,它将是:
Button myButton = (Button)Master.FindControl("myButton");
myButton.Visible = false;
您必须在页面/用户控件标记中引用 MasterPage。
<%@ Reference VirtualPath="..." %>
然后在代码隐藏中,您只需将 Page.MasterPage 转换为您的 MasterPage 并访问其属性。
MyMasterPage myMasterPage = (MyMasterPage)Page.Master;
Master.FindControl("myButton").Visible = False
请注意,用于运行上述命令的控件不应位于更新面板内。
是的,他们可以,并且有一些方法可以解决这个问题。
我使用的方法是在母版页中创建公共方法,这些方法将对母版页中的数据进行修改/访问。例如,我通常喜欢修改我所在的当前页面/类别的链接样式,所以我的母版页中有这样一个方法:
Public Sub SetNavigationPage(ByVal MenuName As String)
DirectCast(Me.FindControl(MenuName), HyperLink).CssClass = "MenuCurrent"
End Sub
然后在我的内容页面中,我只需像这样访问此方法:
Dim myMaster As EAF = DirectCast(Me.Master, EAF)
myMaster.SetNavigationPage("hypViewEmployee")
...其中 EAF 是我的母版页类的名称。
我发现的一个有趣的问题是,在尝试以这种方式显示/隐藏它们时,我在使用 .NET 控件的 Visibility 属性时遇到了麻烦。这是由于母版页和内容页的呈现顺序。为了解决这个问题,我为可见和隐藏设置了一个基本的 CSS 样式,并相应地设置了 CssClass 属性。
我遇到了一个问题,除非我在 ContentPlaceHolder 中查找它,否则我无法确定控件。在本例中为标签 (Label.ID = "lblMstrMessage")。我的代码如下(其中 ContentPlaceHolder.ID = "ContentTopPortion")
Control cph = this.Master.FindControl("ContentTopPortion");
Label mpLabel = (Label)cph.FindControl("lblMstrMessage");