如何从 App_Code 引用 ASP.net MasterPage

发布于 2024-07-12 03:37:33 字数 783 浏览 5 评论 0原文

我正在开发一个 .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 可能会更改。

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 with a property.

public partial class MyMaster : System.Web.UI.MasterPage
{
...
    private string pageID = "";

    public string PageID
    {
        get { return pageID; }
        set { pageID = value; }
    }
}

I'm trying to reference this property from a property in MyPage.

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

I end up with "The type or namespace name 'MyMaster' could not be found. I've got it working by using FindControl() instead of a property on the MyMaster page, but IDs in the master page could change.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

耳根太软 2024-07-19 03:37:33

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

在 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

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
叫嚣ゝ 2024-07-19 03:37:33

我找到了一些背景,它的发生是因为事物的构建和引用方式。

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

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

因此就有了单向街。

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

现在我都清楚了。

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.

多彩岁月 2024-07-19 03:37:33

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

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

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;
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文