2009-10-28 4 views
5

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

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

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

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

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

т.д.

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

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

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

ответ

3

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

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

1

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

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

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

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

1

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

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

1

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

<%@ Control Language="C#" CodeBehind="<PathToTheFile>" Inherits="namespace.and.classname" %>