Как встроить пользовательские элементы управления ASP.NET MVC в библиотеки классов - PullRequest
3 голосов
/ 27 июня 2009

Я пытаюсь встроить некоторые элементы управления .ascx в библиотеку классов для плагинов для CMS, которую я создаю.

Мой тип проекта - это типичная библиотека класса C # со ссылками, добавленными для system.web.mvc & friends.

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

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TagCloudWidget.Models.TagCloudWidgetData>" %>

Несмотря на то, что у меня есть другой открытый класс в том же проекте под пространством имен TagCloudWidget.Models, я не могу получить файл .ascx, чтобы распознать это. Я попытался включить Imports для пространства имен, но потом просто жалуется, что пространство имен не существует. Файл класса TagCloudData выглядит следующим образом:

namespace TagCloudWidget.Models
{
public class TagCloudWidgetData
{
    public IList<TagCount> TagCounts { get; set; }
    public ContentTypes ContentType;
    public string Controller;
    public string Action;

    public TagCloudWidgetData(IList<TagCount> tagCounts, ContentTypes contentType, string controller, string action)
    {
        TagCounts = tagCounts;
        ContentType = contentType;
        Controller = controller;
        Action = action;
    }
}
}

Вы видите, что я делаю не так?

Так как предложение ниже, я попытался добавить файл с выделенным кодом. Я думаю, что я ближе к выяснению, что не так, но я все еще не могу найти решение. В проекте я добавил ссылки на System.Web и System.Web.Mvc. Но в разделе использования файла codebehind, когда я набираю «using System.», Автозаполнение даже не показывает System.Web или System.Web.Mvc в качестве доступных параметров. Как будто их просто нет на диске. Другие проекты могут включать их и ссылаться на них просто отлично. Я полагаю, что это источник моей проблемы, поэтому я надеюсь, что как только я это выясню, все остальное встанет на свои места. Идеи?

Ответы [ 2 ]

0 голосов
/ 29 июня 2009

Успех! Каким-то образом мой файл .ascx был помечен как «содержимое» в свойствах файла вместо «компилировать». После того, как я это исправил, теперь я могу ссылаться на необходимые сборки и без проблем загружать / запускать плагин. Спасибо за подсказку по файлу codebehind!

(обновление) Другой совет, который я выяснил вчера вечером, заключается в том, что мой плагин также должен находиться в каталоге приложения / bin, а также в каталоге / widgets, в противном случае я получаю исключение «Не удалось загрузить тип ...» , Я еще не понял, как подключить ASP.NET MVC, поэтому мне нужно иметь его только в 1 месте, но когда я это сделаю, я отправлю сюда.

0 голосов
/ 27 июня 2009

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

...