Asp.net 从内容页在母版页上设置属性值
每次加载页面时,我都需要将数据传递给母版页中的变量 我在每个内容页面上设置了一个RequiredRoles字符串[],定义访问该页面所需的角色 在我的母版页上,我有一个方法接受这个数组,并检查当前用户是否在其中一个或多个角色中Asp.net 从内容页在母版页上设置属性值,asp.net,master-pages,roles,Asp.net,Master Pages,Roles,每次加载页面时,我都需要将数据传递给母版页中的变量 我在每个内容页面上设置了一个RequiredRoles字符串[],定义访问该页面所需的角色 在我的母版页上,我有一个方法接受这个数组,并检查当前用户是否在其中一个或多个角色中 我该如何处理这件事?我基本上希望每个页面都定义一个字符串[]RequiredRoles,母版页将在每次调用时加载该字符串,并检查用户是否处于这些角色中。类型转换页面。母版页将添加到母版页,以便执行以下操作: ((MyMasterPageType)Page.Master).
我该如何处理这件事?我基本上希望每个页面都定义一个字符串[]RequiredRoles,母版页将在每次调用时加载该字符串,并检查用户是否处于这些角色中。类型转换页面。母版页将添加到母版页,以便执行以下操作:
((MyMasterPageType)Page.Master).Roles = "blah blah";
在母版页中创建属性,然后从内容页访问该属性: 母版页:
public partial class BasePage : System.Web.UI.MasterPage
{
private string[] _RequiredRoles = null;
public string[] RequiredRoles
{
get { return _RequiredRoles; }
set { _RequiredRoles = value; }
}
}
public string Section { get; set; }
内容页:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load()
{
Master.RequiredRoles = new string[] { /*set appropriate roles*/ };
}
}
我会为所有内容页创建一个基类,比如:
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" }; }
}
}
这具有清洁和干燥的优点,可以去除加载处理程序代码。从BasePage继承的每个页面都需要定义“RequiredRoles”,否则它将无法编译。将页面指令添加到子页面:
<%@ MasterType VirtualPath="~/MasterPage.master" %>
您可以通过以下方式访问此属性:
Master.Section = "blog";
CType(Master.FindControl(“lblName”),Label.Text=txtId.Text
CType(Master.FindControl(“pnllogined”),Panel.Visible=True这一个还没有足够的升级。这是处理需求的正确方法,即使它与OP试图解决的确切问题不同。什么是MyMasterPageType?@Niloofar:创建母版页时,它会创建一个新类。在我的示例中,您将用实际母版页类的名称替换
MyMasterPageType
。将此答案投票给其他答案,因为它显示了指令的使用,这使内容页的工作效果更好,尤其是Visual Studio中的intellisense。