Доступ к свойству главной страницы из класса, который не является частью страницы содержимого в ASP.NET - PullRequest
1 голос
/ 27 мая 2009

Итак, я подключаю свой первый MasterPage, и все работает отлично, кроме одной вещи. Это устаревшее приложение, и у меня есть старый класс BasePage, который наследуют все мои страницы контента. Он наследуется от System.Web.UI.Page, но сам по себе не имеет содержимого (нет файла .aspx). Он запускает кучу меню аутентификации пользователя / предоставления роли. Я хочу сохранить эту функциональность, но использовать ее, чтобы установить элементы управления на моей MasterPage для создания меню. Я не могу понять, как ссылаться на свойства MasterPage без объявления MasterType на странице содержимого.

Мой класс MasterPage называется NIMS_Master, и у меня есть следующее (просто пытаюсь начать):

public partial class NIMS_Master : System.Web.UI.MasterPage { public string MenuList { get; set; }</p> <pre><code> protected void Page_Load(object sender, EventArgs e) {} }

С объявлением MasterType на одной из моих страниц контента: <br> <%@ MasterType VirtualPath="~/NIMS_Master.master" %>

Я могу получить доступ к своей собственности в Login.aspx.cs следующим образом:

this.Master.MenuList = "this is the menu list";

Но в моем BasePage.cs мне некуда поместить объявление MasterType. Все поиски в Google показывают, что я должен разыграть свой класс NIMS_Master в качестве Мастера, но я не могу заставить его работать, чтобы спасти мою жизнь. Я пробовал несколько разных вещей, но мой класс NIMS_Master просто не отображается в BasePage.

((this.Master)NIMS_Master).MenuList = "This is a menu list";

BasePage.cs находится в моем каталоге App_Code, а мой файл MasterPage находится в корне приложения, если это имеет значение.

Ответы [ 3 ]

1 голос
/ 27 мая 2009

Итак, у меня был BasePage в App_Code и я пытался установить свойство моего класса NIMS_Master, которое находилось в корневом каталоге приложения. Мне пришлось создать класс MasterBase, который наследуется от System.Web.UI.MasterPage в App_Code, и поместить туда мои свойства. Боже, я даже не уверен, почему я думал, что могу получить доступ к этим свойствам класса из кода приложения.

1 голос
/ 27 мая 2009

Как я вижу, ваш каст должен быть: ((NIMS_Master) this.Master) .MenuList

0 голосов
/ 24 января 2018

MasterBase работал и для меня, спасибо fr0man.

В моем случае в моем файле master.aspx.cs было открытое свойство, которое я переместил в новый класс MasterBase, чтобы он мог быть доступен другим классам.

Шаг 1. Создайте новый файл MasterBase.cs в вашем каталоге App_Code. (Ниже мой полный класс.)

public partial class MasterBase : System.Web.UI.MasterPage
{
    public string MyProperty = "Default";
}

Шаг 2. Обновите файл Master.aspx.cs, чтобы он наследовал от вашего базового класса вместо System.Web.UI.MasterPage, и удалите все объявления свойств, которые вы переместили в класс MasterBase. (Ниже приведены первые несколько строк класса.)

public partial class Master : MasterBase
{
    //The following is now defined in MasterBase.
    //public string MyProperty = "Default";
...

Шаг 3: приведите страницу. Мастер к MasterBase для доступа к его свойствам.

...
    IHttpHandler page = HttpContext.Current.Handler;
    if (page is System.Web.UI.Page)
    {
        MasterBase masterPage = (MasterBase)((System.Web.UI.Page)page).Master;
        if (masterPage != null)
            masterPage.MyProperty = "New Value";
    }
...
...