Как ссылаться на один и тот же класс CodeBehind из нескольких файлов .aspx (и иметь возможность предварительно скомпилировать сайт)? - PullRequest
1 голос
/ 09 апреля 2010

У меня есть набор страниц aspx, каждая из которых находится в своем собственном каталоге и ссылается на один код aspx.cs за файлом.

Ранее это работало нормально, потому что я никогда не пытался предварительно скомпилировать сайт. IIS должен был отдельно скомпилировать каждую aspx, связав их с содержимым App_Code, но никогда не ссылаясь более чем на одну aspx одновременно.

Теперь, когда я пытаюсь выполнить предварительную компиляцию веб-сайта с использованием проектов веб-развертывания, я продолжаю получать сообщения об ошибках одного и того же класса, обнаруженного в нескольких сборках.

Я не могу просто отбросить aspx.cs в App_Code и создать его подкласс, потому что он не сможет найти элементы управления на страницах .aspx при компиляции. Может быть, я мог бы явно определить каждый элемент управления на странице в .cs? Но позволит ли это правильно их подключить?

Любые другие идеи о том, как я могу ссылаться на один и тот же класс Page с нескольких страниц .aspx и иметь возможность предварительно скомпилировать весь сайт?

Edit: Похоже, CodeFileBaseClass может быть то, что я хочу. Я оставлю свои .cs в App_Code, явно определю все мои элементы управления страницами, затем укажу этот класс как CodeFileBaseClass в aspx-файлах, которые наследуются от него. Мысли? * * 1013

Edit2: Я нашел решение, но поскольку я пока не могу пометить его как принятое, я все еще хотел бы посмотреть, смогут ли кто-нибудь еще найти какие-то другие решения для этой проблемы.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2010

Решение было:

  1. Возьмите мой .aspx.cs и скопируйте его в App_Code с новым именем класса (FooPage)
  2. Изменить FooPage, чтобы явно объявить все серверные элементы управления, на которые он ссылается.
  3. Теперь для каждого из моих файлов .aspx, которые ссылаются на исходный файл .aspx.cs:
    1. Создайте для них файл .aspx.cs.
    2. Класс в .aspx.cs будет наследоваться от класса, который я переместил в App_Code
    3. Установить CodeFileBaseClass="Namespace.To.FooPage" в .aspx

Это позволяет ASP.net легко подключить все элементы управления на стороне сервера в .aspx к защищенным членам базового класса.

Теперь у меня есть только 1 класс в каждом коде и я могу предварительно скомпилировать весь сайт!

0 голосов
/ 09 апреля 2010

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

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

...