如何从子页面控制asp.net主页面上的元素

时间:2009-07-07 14:48:07

标签: c# asp.net master-pages

我的asp.net网站上有几页我想关闭母版页上的控件。有没有办法从子页面与母版页进行通信?

5 个答案:

答案 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