UserControls в библиотеке классов - PullRequest
5 голосов
/ 28 октября 2009

Я преобразую проект 1.1 в 2.0 и у меня возникли проблемы с некоторыми элементами управления.

В первоначальном проекте был проект библиотеки классов и проект веб-сайта. В проекте библиотеки классов была папка UserControls, в которой было несколько файлов ascx и их код за файлами.

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

В старом пользовательском элементе управления все веб-элементы управления в пользовательском элементе управления были перечислены следующим образом

protected System.Web.UI.WebControls.DropDownList _findModeList;

и т.д.

Я подумал, что если это .net 2 и вместо этого используется атрибут CodeFile, мне может не понадобиться это делать, но он не компилируется, когда я его опускаю.

Однако, когда я включаю его, он компилируется, но я получаю «Ссылка на объект не установлена ​​для экземпляра объекта». ошибка при попытке использовать _findModeList в файле кода.

Можно ли поместить пользовательские элементы управления в библиотеку классов в .net 2.0 и выше?

Ответы [ 4 ]

3 голосов
/ 29 октября 2009

Не совсем. Файл .ASCX должен быть включен в каждый проект веб-приложения, в котором он используется. Чтобы избежать дублирования, вы можете сохранить UserControl в папке библиотеки классов и использовать функцию «Добавить как ссылку» в Visual Studio.

Выберите «Добавить существующий элемент» в контекстном меню веб-приложения, выберите пользовательский элемент управления и вместо нажатия кнопки «Добавить» нажмите стрелку в этой кнопке и выберите «Добавить как ссылку».

1 голос
/ 29 октября 2009

Вы пытались изменить / добавить атрибут Inherits в теге <% @ Control%>?

 <%@ Control Language="C#" CodeBehind="<PathToTheFile>" Inherits="namespace.and.classname" %>
1 голос
/ 29 октября 2009

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

После создания веб-приложения просто создайте пользовательский элемент управления (.ascx). После этого вы можете попробовать перестроить ваше веб-приложение. После завершения вы можете перейти в каталог bin, там должна быть dll для вашего веб-приложения. Теперь вы можете использовать эту DLL в другом проекте веб-сайта / веб-приложения. Просто добавьте ссылку на эту DLL.

1 голос
/ 29 октября 2009

Вы работаете с проектом веб-приложения? Или веб-сайт? Это сбивает с толку, я знаю ...

Если вы работаете с WAP, используйте CodeFile и позвольте ASP.NET сгенерировать файлы .designer.cs для вас. Не объявляйте объекты из вашего .acsx. Вы объявляете новый / другой DropDownList, когда явно объявляете _findModeList в файле .cs, на который ссылается CodeFile. Вот почему вы получаете нулевую ссылку ... она не была инициализирована. Если у вас нет файла .designer, щелкните правой кнопкой мыши файл .ascx в обозревателе решений и выберите «Преобразовать в веб-приложение».

Если вы работаете с сайтом, а не с WAP, используйте атрибут CodeBehind. Он продолжит работать как в ASP.NET 1.1 и будет компилироваться на лету.

Чтобы заставить элемент управления полностью жить в DLL ... используйте "пользовательские элементы управления", а не пользовательские элементы управления. Опять смущает.

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