【问题标题】:Set Property Value on Master Page from Content Page从内容页面设置母版页上的属性值
【发布时间】:2010-11-07 12:00:00
【问题描述】:

每次加载页面时,我都需要将数据传递给母版页中的变量。

我在每个内容页面上设置了一个RequiredRoles 字符串[],定义了访问该页面所需的角色。

在我的母版页上,我有一个方法接受这个数组,并检查当前用户是否处于其中的一个或多个角色中。

我将如何管理这个?我基本上希望每个页面都定义一个 String[] RequiredRoles,并且母版页将在每次调用时加载它并检查用户是否处于这些角色中。

【问题讨论】:

    标签: asp.net master-pages roles


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2015-08-15
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        相关资源
        最近更新 更多