如何从App_Code引用ASP.net MasterPage

时间:2009-01-30 11:42:32

标签: c# asp.net master-pages

我正在开发.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'。我通过在MyMaster页面上使用FindControl()而不是属性来实现它,但母版页中的ID可能会发生变化。

3 个答案:

答案 0 :(得分:6)

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

在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

答案 1 :(得分:1)

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

App_Code中的所有内容都汇编成一个程序集。

其余的,aspx文件,代码隐藏,masterpages等,编译成另一个引用App_Code的assemlby。

因此是单行道。

也是Ben的解决方案有效的原因。谢谢Ben。

现在我很清楚。

答案 2 :(得分:0)

我意识到已有可接受的解决方案,但我偶然发现了这个问题。

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