从内容页面设置母版页的属性,并从asp.net中的另一个内容页面获取该属性值

我有一个包含一个属性名称事件类型的母版页。 现在我想从内容页面设置此属性,然后该属性值应该可用于另一个内容页面。

这可能与asp.net? 如果是,请帮助我。

是的,我的内容页面已经inheritance了另一个非主页面。

如果此属性是您添加到母版页的自定义属性,则必须将MasterType声明添加到合并它的页面。

 <%@ MasterType virtualpath="~/Path/To/Your.master" %> 

这允许网站或应用程序在编译时知道母版页的特定类型,并允许您像控件中的任何其他属性一样访问它。

 Page.Master.MyCustomerProperty = someValue; 

编辑:作为旁注,在将此属性下载到下一个控件时,最好创建(并引发)指示属性已更改的自定义事件。 这样,许多控件可以订阅事件并“自我更新”,而不必关心设置属性的时间。

示例:在主页面中,您可以将事件定义为“全局”变量。 然后在您的财产中,您可以举起此活动。

 public event EventHandler myPropertyChanged; public delegate void MyPropertyChanged(object sender, EventArgs e); //... public string MyProperty { get { return _myProperty; } set { _myProperty = value; if (myPropertyChanged != null) myPropertyChanged(this, new EventArgs()); } } 

然后在您的其他控件中,您可以订阅此事件以了解它何时更改:

 protected void Page_Load(object sender, EventArgs e) { Page.Master.MyPropertyChanged += new EventHandler(MasterPropertyChanged); } protected void MasterPropertyChanged(object sender, EventArgs e) //Rememeber you need the VirtualType in order for this event to be recognized SomeLocalValue = Page.Master.MyProperty; } 

可以在CodeProject上找到此过程的详细分步教程。 可以在MSDN上找到一个好的c#自定义事件教程。

如果您的页面来自不同的请求,则主属性将不起作用。 母版页不是静态的,每个请求都有一个不同的页面,这意味着当您尝试检索它时,您设置值的实例已经消失。 在Session字典中,您应该放置要在请求之间保留的用户内容。

将属性添加到母版页:

 public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } } 

然后,获取页面的主人并将其转换为主类类型:

 ((MyMaster)Page.Master).lblBannerText = "banner text"; 

您可以使用页面的Master property并访问您的财产

链接: http : //msdn.microsoft.com/fr-fr/library/system.web.ui.page.master.aspx

样品

 ContentPlaceHolder mpContentPlaceHolder; TextBox mpTextBox; mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); if(mpContentPlaceHolder != null) { mpTextBox = (TextBox) mpContentPlaceHolder.FindControl("TextBox1"); if(mpTextBox != null) { mpTextBox.Text = "TextBox found!"; } } 

你可以试试这个

在母版页中创建一个属性,然后从内容页面访问它:

母版页:

 public partial class BasePage : System.Web.UI.MasterPage { private string[] _RequiredRoles = null; public string[] RequiredRoles { get { return _RequiredRoles; } set { _RequiredRoles = value; } } } 

内容页:

  public partial class _Default : System.Web.UI.Page { protected void Page_Load() { Master.RequiredRoles = new string[] { //set appropriate roles }; } } 

获取或设置MasterPage属性的简便方法,就像这样。在内容页面中执行以下操作。

 protected override void Render(HtmlTextWriter writer) { var master = this.Master as Site; master.SiteName += "|网站首页"; base.Render(writer); } 

并在母版页中定义属性

 public partial class Site : System.Web.UI.MasterPage { public string MetaDescription { get; set; } public string MetaKeywords { get; set; } public string SiteName { get; set; } public SiteSettings siteSettings { get; set; } protected void Page_Load(object sender, EventArgs e) { siteSettings = SettingsFactory.Get(); MetaDescription = siteSettings.SearchMetaDescription; MetaKeywords = siteSettings.SearchMetaKeywords; SiteName = siteSettings.SiteName; } } 

我有类似的问题。 这是我做的:

 //Id the form tag and place a runat server 
//In C# Masterpage.cs - Expose the forms properties public System.Web.UI.HtmlControls.HtmlForm Form1 { get { return form1; } set { form1 = value; } } //In C# Consuming page add this to pageLoad using UniqueId ((SiteMaster)Page.Master).Form1.DefaultButton = btnSearchUsersLink.UniqueID;