我的asp.net网站上有几页我想关闭母版页上的控件。有没有办法从子页面与母版页进行通信?
答案 0 :(得分:18)
最简单的方法是在主页面上设置一个属性,在调用时处理开/关功能。然后在您的子页面中设置MasterType directive以获得对母版页的强类型引用,以避免强制转换。
您的子页面将包含:
<%@ MasterType VirtualPath="~/Site1.Master" %>
并调用母版页的属性:
Master.MyLabel = false; // or true
所以在你的主人身上你可以拥有:
public bool MyLabel
{
get
{
return masterLabel.Enabled;
}
set
{
masterLabel.Enabled = value;
}
}
答案 1 :(得分:10)
您需要在页面标记中使用MasterType指令
<%@ MasterType TypeName="Namespace.Etc.MyMasterPage" %>
然后,您将能够使用
访问页面母版页的任何公共属性this.Master.PropertyIWantToIntefereWith...
希望这有帮助
答案 2 :(得分:3)
以下是如何与子页面与母版页进行通信的示例。
在母版页中,为您想要访问的控件创建一个属性,比如一个名为lblUser的标签......
public string MyProperty
{
set { lblUser.Text = value; }
}
在子页面中,访问刚刚创建的属性,如以下示例所示...
((MyMaster)this.Master).MyProperty = "Text changed from Sub Page";
我们能够这样做,因为Master只是一个继承System.Web.UI.MasterPage的类。
我们创建的Label.Text属性只是Master类的属性(此名称将是当前母版页的特定名称,在本例中为MyMaster)。
请注意,如果没有强制转换为特定的母版页类,它将无法工作,这是因为您添加了一个在System.Web.UI.MasterPage中不存在的字段,即this.Master的类型,但是在您的特定类中硕士课。
答案 3 :(得分:0)
我正在寻找类似的东西,但这个解决方案对我来说似乎不起作用。我有一个嵌套的母版页。这适用于嵌套的主人吗?当我实现时,它没有识别我添加到主人的控件。
答案 4 :(得分:-1)
this.Master.FindControl("controlid").dosomethinghere