Как мне ссылаться на ASPP MasterPage из App_Code - PullRequest
4 голосов
/ 30 января 2009

Я работаю над сайтом .net 3.5, стандартный проект сайта.

Я написал собственный класс страниц в папке sites_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, но идентификаторы на главной странице могли измениться.

Ответы [ 3 ]

6 голосов
/ 30 января 2009

Я имел тенденцию делать следующее с проектами веб-сайта:

В 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 голос
/ 30 января 2009

Я нашел некоторый фон для этого, это происходит из-за того, как все строится и на что ссылаются.

Все в App_Code компилируется в сборку.

Остальные файлы aspx, код, мастер-страницы и т. Д. Компилируются в другую сборку, которая ссылается на App_Code.

Отсюда улица с односторонним движением.

А также, почему решение Бена работает. Спасибо Бен.

Теперь мне все ясно.

0 голосов
/ 13 ноября 2013

Я понимаю, что для этого уже есть принятые решения, но я наткнулся на эту тему.

Самым простым решением является решение, указанное на веб-сайте 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;
        }
    }
...