Por que não fazer o meu extensões HtmlHelper trabalho?
-
03-07-2019 - |
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?
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.