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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top