C# 从内容页设置母版页的属性,并从asp.net中的另一个内容页获取该属性值
我有一个带有一个属性名事件类型的母版页。现在我想从一个内容页设置这个属性,然后该属性值应该可以用于另一个内容页 这在asp.net中是可能的吗?如果是,请帮助我C# 从内容页设置母版页的属性,并从asp.net中的另一个内容页获取该属性值,c#,asp.net,C#,Asp.net,我有一个带有一个属性名事件类型的母版页。现在我想从一个内容页设置这个属性,然后该属性值应该可以用于另一个内容页 这在asp.net中是可能的吗?如果是,请帮助我 是的,我的内容页面已经继承了另一个非主控页面。您可以使用页面的主控属性,并访问您的属性 链接: 样品 ContentPlaceHolder mpContentPlaceHolder; TextBox mpTextBox; mpContentPlaceHolder = (ContentPlaceHolder)
是的,我的内容页面已经继承了另一个非主控页面。您可以使用页面的
主控属性
,并访问您的属性
链接:
样品
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 string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
内容页:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load()
{
Master.RequiredRoles = new string[] { //set appropriate roles };
}
}
如果此属性是添加到母版页的自定义属性,则必须向包含它的页面添加
MasterType
声明
<%@ MasterType
virtualpath="~/Path/To/Your.master"
%>
编辑:作为旁注,在将此属性下放到下一个控件时,最好创建(并引发)一个指示属性已更改的自定义事件。通过这种方式,许多控件可以订阅事件并“自我更新”,而不必关心设置属性的时间
示例:在母版页中,可以将事件定义为“全局”变量。然后在您的财产中,您可以发起此事件
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;
}
有关此过程的详细教程,请访问。可以在上找到一个好的c#自定义事件教程。如果您的页面来自不同的请求,则主属性将不起作用。母版页不是静态的,每个请求都有一个不同的母版页,这意味着当您试图检索它时,您设置值的实例就消失了。
会话
字典是您在请求之间保存用户内容的地方。获取或设置母版页属性的简单方法,如下所示
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;
}
}
公共部分课程网站:System.Web.UI.MasterPage
{
公共字符串元描述{get;set;}
公共字符串元关键字{get;set;}
公共字符串SiteName{get;set;}
公共站点设置站点设置{get;set;}
受保护的无效页面加载(对象发送方、事件参数e)
{
siteSettings=SettingsFactory.Get();
MetaDescription=siteSettings.SearchMetaDescription;
MetaKeywords=siteSettings.SearchMetaKeywords;
SiteName=siteSettings.SiteName;
}
}
将属性添加到母版页:
public partial class BasePage : System.Web.UI.MasterPage
{
private string[] _RequiredRoles = null;
public string[] RequiredRoles
{
get { return _RequiredRoles; }
set { _RequiredRoles = value; }
}
}
public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
然后,获取页面的母版并将其强制转换为母版类类型:
((MyMaster)Page.Master).lblBannerText = "banner text";
我也有类似的问题。以下是我所做的:
//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;
//标识表单标记并在服务器上放置runat
//在C#Masterpage.cs中-公开表单属性
public System.Web.UI.HtmlControls.HtmlForm Form1{
获取{return form1;}
设置{form1=值;
} }
//在C#消费页面中,使用UniqueId将其添加到pageLoad
((SiteMaster)Page.Master).Form1.DefaultButton=btnSearchUsersLink.UniqueID;
您需要将母版页强制转换为正确的类型,除非您使用和扩展方法您好朋友们,我可以从contentpage设置此属性。但是当我转到另一个内容页时,该值将变为null。我如何保留我最近设置的值。我可以从contentpage设置此属性。但是当我转到另一个内容页,该值将变为null。我如何保留该值。我最近设置的。@Darshan:请记住,它不一定为null。很可能是时间问题。在设置属性之前,您可能正试图从另一个控件访问该属性。请看我的编辑,以找到解决该特定问题的方法。自定义事件..我对此一无所知..你能用例子解释一下吗兄弟…那太好了@达珊:哦,很抱歉。我在回答另一个问题的同时,在VB中。我会改正的。@Darshan:我发布了一个编辑。您应该将其视为psuedo代码,因为我没有机会测试此部分,并且我正在从内存中进行RIFF。我可以从contentpage设置此属性。但是当我转到另一个内容页时,该值将变为null。如何保留该值。我最近设置了该值。您可以使用会话缓存来持久化,,ViewState不够