Pergunta

Eu estou construindo um site ASP.Net MVC. Ao invés de ter tudo em um projeto, eu decidi separar a Web, Modelo e Controlador-se em diferentes projetos na mesma solução, que a referência cada-outro.

A referência é a seguinte:

Web --- [referências] ---> Controlador --- [referências] ---> Modelo

Agora eu queria acrescentar 2 métodos personalizados para a classe HtmlHelper - eles são chamados de "includescript" e "IncludeStyle". Cada um deles ter um único parâmetro de cadeia, e gerar um script ou link tag respectivamente.

Eu criei uma classe extensor, de acordo com a documentação na web, e escrito os dois métodos e compilado a aplicação.

Agora, quando eu ir para a página Public.Master (que é a minha página mestre principal, e um dos lugares onde eu pretendo usar esses métodos), eu posso entrar o código, como a seguir:

<%= Html.IncludeScript("\js\jquery.js") %>

O IntelliSense pega e método e me mostra a sintaxe apenas multa includescript. Então eu esperaria que tudo deve funcionar.

Mas isso não acontece.

compila tudo, mas assim que eu executar o aplicativo, recebo o seguinte erro de tempo de execução da linha 14 de Default.aspx.cs:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

Aqui está a linha de código que o erro acontece em:

httpHandler.ProcessRequest(HttpContext.Current);

Todas as idéias que poderia estar acontecendo de errado aqui?

Foi útil?

Solução

Certifique-se de que o espaço de nomes de suas extensões é acessível à nossa vista. Você precisa tanto isso no seu ponto de vista:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

ou este em sua seção de namespaces de configuração web:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Outras dicas

Se você estiver usando fortemente digitado pontos de vista, e seu método de extensão está estendendo HtmlHelper<object>, não é indo para encontrar a extensão. Você teria que criar um extensor genérico para estender HtmlHelper<T>.

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

Em seguida, você verá o seu método extensor aparecer.

Espero que ajuda.

Certifique-se de ter uma diretiva de importação para o seu namespace extensões métodos em sua página.

Caso contrário, Visual Studio pode ser capaz de ver, mas seu site não será capaz de.

Você tem certeza de que o compilador está definida para .NET Framework 3.5? Isso aconteceu comigo quando eu inadvertidamente definir o compilador para .NET Framework 2.0

No método includescript certificar-se de que o que você está estendendo é System.Web.Mvc.HtmlHelper. É possível que exista um HtmlHelper em algum outro namespace.

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