从内容页面设置母版页上的属性值
Posted
技术标签:
【中文标题】从内容页面设置母版页上的属性值【英文标题】:Set Property Value on Master Page from Content Page 【发布时间】:2010-11-07 12:00:00 【问题描述】:每次加载页面时,我都需要将数据传递给母版页中的变量。
我在每个内容页面上设置了一个RequiredRoles 字符串[],定义了访问该页面所需的角色。
在我的母版页上,我有一个方法接受这个数组,并检查当前用户是否处于其中的一个或多个角色中。
我将如何管理这个?我基本上希望每个页面都定义一个 String[] RequiredRoles,并且母版页将在每次调用时加载它并检查用户是否处于这些角色中。
【问题讨论】:
【参考方案1】:将页面指令添加到您的子页面:
<%@ MasterType VirtualPath="~/MasterPage.master" %>
然后将属性添加到您的母版页:
public string Section get; set;
你可以像这样访问这个属性:
Master.Section = "blog";
【讨论】:
投票赞成这个答案而不是其他答案,因为它显示了 指令的使用,这使得内容页面的工作变得更好 - 特别是 Visual Studio 中的智能感知。【参考方案2】:Typecast Page.Master 到您的母版页,以便您执行以下操作:
((MyMasterPageType)Page.Master).Roles = "blah blah";
【讨论】:
什么是 MyMasterPageType? @Niloofar:创建母版页时,它会创建一个新类。在我的示例中,您将MyMasterPageType
替换为您的实际母版页类的名称。【参考方案3】:
在母版页中创建一个属性,然后从内容页访问它:
母版页:
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*/ ;
【讨论】:
【参考方案4】:我会为所有内容页面创建一个基类,例如:
public abstract class BasePage : Page
protected abstract string[] RequiredRoles get;
protected override void OnLoad(EventArgs e)
base.OnLoad(e);
// display the required roles in a master page
if (this.Master != null)
// value-assignment
然后我让每个页面都继承自BasePage,并且每个页面都定义一个RequiredRoles
public partial class _Default : BasePage
protected override string[] RequiredRoles
get return new[] "Admin", "Moderator" ;
这具有清洁和干燥 OnLoad 处理程序代码的优点。并且从 BasePage 继承的每个页面都需要定义一个“RequiredRoles”,否则它将无法编译。
【讨论】:
这个没有得到足够的支持。这是处理需求的正确方法,即使它与 OP 试图解决的确切问题不同。【参考方案5】:CType(Master.FindControl("lblName"), 标签).Text = txtId.Text CType(Master.FindControl("pnlLoginned"), Panel).Visible = True
【讨论】:
以上是关于从内容页面设置母版页上的属性值的主要内容,如果未能解决你的问题,请参考以下文章