Как встроить ASP.NET Пользовательские элементы управления MVC в библиотеки классов

StackOverflow https://stackoverflow.com/questions/1051231

  •  20-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь встроить некоторые элементы управления .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.Но в разделе using файла codebehind, когда я набираю "используя System.", автозаполнение даже не показывает System.Web или System.Web.Mvc в качестве доступных опций.Как будто их просто не существует на диске.Другие проекты могут включать их и ссылаться на них просто отлично.Я полагаю, что это источник моей проблемы, поэтому я надеюсь, что как только я разберусь с этим, все остальное просто встанет на свои места.Идеи?

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top