How do I reference an ASP.net MasterPage from App_Code

后端 未结 3 1365
暖寄归人
暖寄归人 2020-12-18 10:16

I\'m working on a .net 3.5 site, standard website project.

I\'ve written a custom page class in the sites App_Code folder (MyPage).

I also have a master page

相关标签:
3条回答
  • 2020-12-18 10:25

    I found some background to this, it happens because of the way things are built and referenced.

    Everything in App_Code compiles into an assembly.

    The rest, aspx files, code behind, masterpages etc, compile into another assemlby that references the App_Code one.

    Hence the one way street.

    And also why Ben's solution works. Thanks Ben.

    Tis all clear to me now.

    0 讨论(0)
  • 2020-12-18 10:40

    I've tended to do the following with Web Site projects:

    In App_Code create the the following:

    BaseMaster.cs

    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";
            }
        }
    }
    

    My Master pages then inherit from BaseMaster:

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

    And my pages inherit from BasePage:

    public partial class _Default : BasePage
    
    0 讨论(0)
  • 2020-12-18 10:40

    I realise there are already accepted solutions for this, but I just stumbled across this thread.

    The simplest solution is the one listed in the Microsoft website (http://msdn.microsoft.com/en-us/library/c8y19k6h.ASPX )

    Basically it says, your code will work as-is, if you include an extra directive in the child page aspx:

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

    Then you can directly reference the property in the base MyPage by:

      public string PageID
      {
            set
            {
                Master.PageID = value;
            }
            get
            {
                return Master.PageID;
            }
        }
    
    0 讨论(0)
提交回复
热议问题