ASP.Net Web User Control методы и события недоступны в коде позади хост-страницы - PullRequest
1 голос
/ 10 августа 2011

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

  • Создал новый веб-проект и добавил свой элемент управления веб-пользователями.
  • В IIS я включил проект какприложения, и установите эту новую папку проекта как виртуальный каталог во всех проектах, которые будут его использовать, и включили каждый виртуальный каталог как приложение.
  • Для каждого проекта, который использует элемент управления, я добавилссылка на dll и добавление элемента управления к этому проекту web.config:

    <add tagPrefix="ut" src="~/UserControls/ValidateAcct.ascx" tagName="ValidateAcct" />
    

    ПРИМЕЧАНИЕ. 'UserControls' - это виртуальный каталог, который фактически не существует в каждом из хост-проектов.

  • Затем я добавил элемент управления на страницу хоста:

    <ut:ValidateAcct ID="valAcct" runat="server" />
    

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

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

    protected virtual void AccountValidated(object sender, EventArgs e) { }

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

Цель в том, чтобы мне это понравилосьпользовательский элемент управления, который будет использоваться несколькими проектами на одном веб-сайте, но должен содержать только одну копию элемента управления / кода.Вот почему я пошел по пути виртуального каталога, но у меня есть чувство, что это причина всех моих проблем.Буду очень признателен за любую помощь!

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

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

public event EventHandler AccountValidated;

Что касается вашей второй проблемы, вы можете проверить файл designer.cs и убедиться, что тип пользовательского элемента управления - ValidateAcct . Если это не ValidateAcct, а просто UserControl, то вы не можете увидеть ни один из созданных вами методов.

1 голос
/ 10 августа 2011

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

Действительно сложно поделиться пользовательским элементом управления, но у вас все получится, если вы будете следовать этим инструкциям :

  1. Напишите свой пользовательский элемент управления, как обычно, обычно используя Visual Studio дизайнер.
  2. Протестируйте его, используя простую страницу, прежде чем пытаться развернуть его.
  3. Разверните приложение, чтобы предварительно скомпилировать его.
  4. Получение сборки пользовательского элемента управления, созданной на этапе развертывания, и вы по существу сделали это: у вас есть пользовательский элемент управления.
  5. Наконец, используйте свой пользовательский элемент управления в других приложениях так же, как вы всегда используйте пользовательские элементы управления.

Существует также еще один пост на эту тему, в котором содержится некоторая автоматизированная информация о MSBuild.
Я бы попробовал сначала , потому что это кажется более простым способом, но я не уверен на 100%, что это работает.

0 голосов
/ 10 августа 2011

По предложению Дана Абрамова, лучший способ поделиться кодом между вашими веб-проектами - это создать собственную библиотеку, и, заметьте, вам не нужно создавать экземпляр своего элемента управления в программном обеспечении.

Я нашелинтересные ответы на старый вопрос о создании пользовательских библиотек управления сетью asp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...