从用户控件访问母版页属性

本文关键字:母版页 属性 访问 控件 用户 | 更新日期: 2023-09-27 17:59:45

如何从用户控件中的codeehind访问母版页上定义的属性?

从用户控件访问母版页属性

var master = (this.Page.Master as SiteMaster);
if (master != null)
{
    var myProperty = master.MyProperty;
}

Page.Master公开底层母版页(如果有的话)。

正如我所理解的:

  1. 有一个母版页(MasterPage.Master)
  2. 使用MasterPage的网页(Default.aspx)
  3. 网页具有用户控件
  4. 现在您想要从此用户控件访问MasterPage的属性

假设在MasterPage中有一个名为的属性

public string Name{ get{return "ABC";} }

现在您想从UserControl访问此属性。

为此,您首先必须像这样在用户控件中注册母版页。

<%@ Register TagPrefix="mp" TagName="MyMP" Src="~/MasterPage.master" %>

现在,您必须首先获取该用户控件所在页面的引用,然后获取该页面的母版页。代码将是这样的。

System.Web.UI.Page page = (System.Web.UI.Page)this.Page;
MasterPage1 mp1 = (MasterPage1)page.Master;
lbl1.Text= mp1.Name;
this.NamingContainer.Page.Master.Property;   

如果MasterPage是这样的,

public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //
    }
    // the property which I would like to access from user control  
    public String MyName
    {
        get
        {
            return "Nazmul";
        }
    }  
}

然后从用户控制,你可以通过这种方式访问"MyName",

MasterPage m = Page.Master as MasterPage;
Type t = m.GetType();
System.Reflection.PropertyInfo pi = t.GetProperty("MyName");
Response.Write( pi.GetValue(m,null)); //return "Nazmul"

如果您的母版页是固定的,您可以找到这样的控件和属性:

    MasterPageName mp =(MasterPageName) Page.Master;
   //find a control
    Response.Write((mp.FindControl("txtmaster") as TextBox).Text);
   //find a property
   Response.Write(mp.MyProperty.Text);

//在MasterPageName.cs 上

 public TextBox MyProperty
 {
    get { return txtmaster; }
 }

//在MasterPageName.Master 上

<asp:TextBox runat="server" ID="txtmaster"></asp:TextBox>