ASP.NET - как вы ссылаетесь на класс, которого нет в app_code - PullRequest
3 голосов
/ 16 апреля 2009

Я создал мастер-страницу под названием MyMasterPage.

public partial class MyMasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

Я также создал класс с именем Class1 в коде приложения:

public class Class1
{
    public Class1()
    {
      MyMasterPage m;
    }
}

В Class1 я хотел бы сослаться на MyMasterPage, но я получаю предупреждение компилятора:

The type or namespace name 'MyMasterPage' could not be found (are you missing a using directive or an assembly reference?)

Какой код мне нужно добавить, чтобы заставить это работать?

Классы находятся в папках следующим образом:

альтернативный текст http://www.yart.com.au/stackoverflow/masterclass.png

Ответы [ 3 ]

5 голосов
/ 16 апреля 2009

Вы не сможете ссылаться на MyMasterPage, если не добавите его в App_Code. Обычно в такой ситуации вы создаете базовую главную страницу, которая наследуется от MasterPage. например,

public partial class MasterPageBase : System.Web.UI.MasterPage
{
   // Declare the methods you want to call in Class1 as virtual
   public virtual void DoSomething() { }

}

Затем в ваших реальных главных страницах вместо наследования от System.Web.UI.MasterPage наследуйте от вашей MasterPageBase. Перезапишите виртуальные методы на ваших наследующих страницах.

public partial class MyMasterPage : MasterPageBase

В Class1, где вам нужно сослаться на него (и я предполагаю, что вы получаете главную страницу из свойства MasterPage класса Page, ваш код будет выглядеть так ...

public class Class1
{
    public Class1(Page Target)
    {
      MasterPageBase _m = (MasterPageBase)Target.MasterPage;
      // And I can call my overwritten methods
      _m.DoSomething();
    }
}

Это довольно долгий путь, но пока единственное, что я могу придумать, это работает, учитывая модель ASP.NET.

1 голос
/ 16 апреля 2009

fung имеет хорошее предложение, используя базовую страницу. Файлы App_Code хранятся в другой сборке, чем страницы aspx. Это происходит с сайтами проектов.

Я не уверен, есть ли у вас вариант в вашем случае. Но если вы выберете проект веб-приложения вместо проекта веб-сайта, у вас не возникнет этой проблемы.

Вот сообщение в блоге, которое может пролить некоторый свет: VS 2005 Система веб-проектов: что это такое и почему мы это сделали? Скотт Гатри

1 голос
/ 16 апреля 2009

Попробуйте поместить свою главную страницу в пространство имен

...