【问题标题】:How do I reference an ASP.net MasterPage from App_Code如何从 App_Code 引用 ASP.net MasterPage
【发布时间】:2010-10-04 11:02:37
【问题描述】:

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

我在站点 App_Code 文件夹 (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 页面上的属性使其工作,但母版页中的 ID 可能会更改。

【问题讨论】:

    标签: c# asp.net master-pages


    【解决方案1】:

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

    在 App_Code 中创建以下内容:

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

    然后我的母版页继承自 BaseMaster:

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

    我的页面继承自 BasePage:

    public partial class _Default : BasePage
    

    【讨论】:

    • 抱歉删除了一个旧帖子……但事实证明这是今晚问题的解决方案。我很好奇 MyString 东西的目的是什么......似乎没有必要。
    • 没问题@MikeFulton - MyString 属性只是用来回答问题的示例 - Ian 试图在一个公共位置访问一个字符串(在他的例子中是 PageID)。我想我的回答应该使用他的术语,但我可能只是在编写一个通用示例。
    【解决方案2】:

    我找到了一些背景知识,这是因为构建和引用事物的方式。

    App_Code 中的所有内容都编译为程序集。

    其余的、aspx 文件、隐藏代码、母版页等,编译成另一个引用 App_Code 的程序集。

    因此是单向街。

    还有 Ben 的解决方案有效的原因。谢谢本。

    现在我都清楚了。

    【讨论】:

      【解决方案3】:

      我意识到已经有公认的解决方案,但我只是偶然发现了这个线程。

      最简单的解决方案是 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;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多