代码之家  ›  专栏  ›  技术社区  ›  Iain M Norman

如何从应用程序代码引用ASP.NET母版页

  •  4
  • Iain M Norman  · 技术社区  · 16 年前

    我正在开发一个.NET 3.5网站,标准网站项目。

    我已经在站点应用程序代码文件夹(mypage)中编写了一个自定义页面类。

    我还有一个带有属性的母版页。

    public partial class MyMaster : System.Web.UI.MasterPage
    {
    ...
        private string pageID = "";
    
        public string PageID
        {
            get { return pageID; }
            set { pageID = value; }
        }
    }
    

    我正在尝试从MyPage中的属性引用此属性。

    public class MyPage : System.Web.UI.Page
    {
    ...
            public string PageID
            {
                set
                {
                    ((MyMaster)Master).PageID = value;
                }
                get
                {
                    return ((MyMaster)Master).PageID;
                }
            }
    }
    

    我以“找不到类型或命名空间名称”mymaster“结尾。我已经使用findcontrol()而不是mymaster页上的属性来实现它,但是master页中的ID可能会更改。

    3 回复  |  直到 11 年前
        1
  •  6
  •   Zhaph - Ben Duguid    16 年前

    我倾向于对网站项目执行以下操作:

    应用程序内代码创建以下内容:

    巴斯马斯特

    using System.Web.UI;
    
    public class BaseMaster : MasterPage
    {
        public string MyString { get; set; }
    }
    

    BasePage.cs:

    using System;
    using System.Web.UI;
    
    public class BasePage : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (null != Master && Master is BaseMaster)
            {
                ((BaseMaster)Master).MyString = "Some value";
            }
        }
    }
    

    然后,我的母版页从basemaster继承:

    using System;
    
    public partial class Masters_MyMasterPage : BaseMaster
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(MyString))
            {
                // Do something.
            }
        }
    }
    

    我的页面从基本页继承:

    public partial class _Default : BasePage
    
        2
  •  1
  •   Iain M Norman    16 年前

    我发现了一些背景,这是因为事物的构建和引用方式。

    应用程序代码中的所有内容都编译成一个程序集。

    其余的,ASPX文件,代码隐藏,母版页等,编译成另一个引用应用程序代码的assembby。

    因此是单行道。

    以及为什么本的解决方案有效。谢谢本。

    我现在明白了。

        3
  •  0
  •   SeeMoreGain    11 年前

    我意识到已经有了可以接受的解决方案,但我只是偶然发现了这条线索。

    最简单的解决方案是Microsoft网站上列出的解决方案 ( http://msdn.microsoft.com/en-us/library/c8y19k6h.ASPX )

    基本上,它说,如果您在子页面aspx中包含一个额外的指令,您的代码将按原样工作:

    <%@ MasterType VirtualPath="~/MyMaster.Master" %>

    然后,您可以通过以下方式直接引用基本mypage中的属性:

      public string PageID
      {
            set
            {
                Master.PageID = value;
            }
            get
            {
                return Master.PageID;
            }
        }