Como construir controles de usuário ASP.NET MVC em bibliotecas de classe
-
20-08-2019 - |
Pergunta
Eu estou tentando construir alguns controles .ascx em uma biblioteca de classe para plugins para um CMS que estou construindo.
O meu tipo de projeto é um típico classe C libary # com referências adicionais para System.Web.Mvc e amigos.
Meu problema surge na tentativa de criar um controle de usuário com rigidez de tipos. Meu controle esta aparência:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TagCloudWidget.Models.TagCloudWidgetData>" %>
Mesmo que eu tenha outra classe pública no mesmo projeto sob a TagCloudWidget.Models
namespace, eu não consigo obter o arquivo .ascx
a reconhecer isso. Eu tentei incluindo Imports
para o namespace, mas então ele só se queixa de que o namespace não existe. Os olhares de arquivo classe TagCloudData como este:
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;
}
}
}
Você pode ver o que estou fazendo de errado?
Uma vez que a sugestão abaixo, eu tentei adicionar um arquivo code-behind. Eu acho que estou perto de descobrir o que está errado, mas eu ainda não sou capaz de encontrar uma solução. No projeto, eu adicionei referências a System.Web e System.Web.Mvc. Mas, no uso do arquivo codebehind, quando eu digito "usando o sistema.", Auto-complete nem sequer mostrar System.Web ou System.Web.Mvc como opções disponíveis. É como se eles simplesmente não existem no disco. Outros projetos são capazes de incluí-los e referenciá-los muito bem. Acho que esta é a fonte do meu problema, então eu estou esperançoso de uma vez que eu descobrir isso o resto só vai cair no lugar. Ideias?
Solução
Eu tive problemas semelhantes com um aplicativo que eu comecei com o lançamento beta. A única coisa que eu encontrei que funciona é criar um arquivo code-behind para o controle e definir a herança no code-behind. Em seguida, no controle, tê-lo herdar da classe definido no seu código-behind. Em projetos mais recentes, construídos a partir do zero usando 1.0, eu não tenho esse problema - mas, novamente eu não tenho minhas classes parciais definidos em uma biblioteca, seja
.Outras dicas
Sucesso! De alguma forma, meu ficheiro.ascx tinha sido marcada "conteúdo" nas propriedades em vez de "compilação" arquivo. Uma vez que fixa que, eu pode, agora, referência aos conjuntos e carga necessárias / executar o plug-in sem problemas. Obrigado pela dica sobre o arquivo codebehind!
(atualização) A outra dica que eu descobri ontem à noite é que meu plugin também tem que ser no diretório do aplicativo / bin, bem como o meu / widgets diretório, caso contrário, eu recebo um "Não foi possível tipo de carga ..." exceção . Eu ainda não descobri ainda como conectar-se ASP.NET MVC, então eu só tenho que tê-lo em um lugar, mas quando eu faço, eu vou postar aqui.