ASP.Net Web窗体-如何从页面和用户控件设置母版页的属性
本文关键字:控件 用户 设置 母版页 属性 窗体 Web Net ASP | 更新日期: 2023-09-27 18:04:38
我有两个母版页,分别由不同的内容页使用。我想从内容页设置母版页属性,以便母版页可以显示基于这些值的一些更改。然后我还需要访问母版页中添加的用户控件中的那些母版页属性来反映一些变化。如何做到这一点?
我已经找到了一种方法,如何通过添加<%@ MasterType VirtualPath="/Site.master" %>
,然后使用**Master.property=value**
从内容页设置母版页属性,但不确定如何访问用户控制。什么好主意吗?
您可以创建一个基类表单,您的母版页面继承它,包括您想要存储的属性:
abstract public class MasterPageBase : System.Web.UI.MasterPage
{
public string Prop1
{
get { return "Some Value"; }
}
}
从你的UserControl,你可以这样访问属性:
MasterPageBase masterPage = (MasterPageBase)this.Page.Master;
string strTest = masterPage.Prop1; // "Some Value"
我无法让上面的答案工作,所以这里是对我有用的:
要从用户控件引用母版页属性。
首先,你的主页将有一个像这样的公共属性:public string BodyClass
{
set
{
this.masterBody.Attributes.Add("class", value);
}
}
现在在用户控件ASCX文件中添加对母版页的引用,如下所示:
<%@ Register Src="~/Source/MasterPages/Main.master" TagPrefix="MSTR" TagName="MasterPage" %>
然后在后面的代码中(在我的例子中是c#)你有这样的代码:
Main masterPage = (Main)this.Page.Master;
masterPage.BodyClass = "container";
如果没有对上面的母版页的引用,您的用户控件将无法找到母版页类。
我猜你可以通过两种方式访问在你的主页中定义的用户控制:
通过使用FindControl方法,为了使用这个,你必须在内容页中添加用户控制的服务器标签,在.aspx页面中添加这个:
<%@ Register Src="~/myControl.ascx" TagName="myControl" TagPrefix"uc" %>
then在代码后面:
myControl = (myControl)this.Page.Master.FindControl("userControl_Id");
或者您可以在母版页中创建一个公共属性,返回您的usercontrol:
public myControl UserControl { get; set; }
,在你的内容页后面的代码中,你可以通过UserControl属性访问这个用户控件:
myControl ctrl = (myControl)this.Page.Master.UserControl;
控件在Master.designer.cs中定义,访问修饰符为"protected "。将其定义剪切并粘贴到代码隐藏(Master.cs)中,并将访问修饰符更改为"public"。然后,您可以访问主控页控件,如Derek Hunziker给出的答案:
MasterPageBase masterPage = (MasterPageBase)this.Page.Master;
string strTest = masterPage.Prop1; // "Some Value"