我有一个包含一个属性名称事件类型的母版页。现在我想从内容页面设置此属性,然后该属性值应该可用于另一个内容页面。
这可以用asp.net吗?如果是,请帮助我。
是的,我的内容页面已经继承了另一个不是主页的页面。
答案 0 :(得分:2)
如果此属性是您添加到母版页的自定义属性,那么您必须向包含它的页面添加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#自定义事件教程。
答案 1 :(得分:2)
如果您的网页来自不同的请求,则无法使用主属性。主页面不是静态的,每个请求都有一个不同的页面,这意味着当您尝试检索它时,您设置值的实例已经消失。 Session
字典是您应该在请求之间保留要保留的用户内容的地方。
答案 2 :(得分:2)
将属性添加到母版页:
public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
然后,获取页面的主人并将其转换为主类类型:
((MyMaster)Page.Master).lblBannerText = "banner text";
答案 3 :(得分:0)
您可以使用页面的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!";
}
}
答案 4 :(得分:0)
你可以试试这个
在母版页中创建一个属性,然后从内容页面访问它:
母版页:
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 };
}
}
答案 5 :(得分:0)
获取或设置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<SiteSettings>.Get();
MetaDescription = siteSettings.SearchMetaDescription;
MetaKeywords = siteSettings.SearchMetaKeywords;
SiteName = siteSettings.SiteName;
}
}
答案 6 :(得分:0)
我有类似的问题。这是我做的:
//Id the form tag and place a runat server
<form id="form1" 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;