Nessas últimas semanas vários blogs (inclusive ScottGu)comentaram sobre o intellisense do JQuery no Visual Studio 2008. Para quem está usando esse framework com aplicações .Net, o uso do intellisense ajuda muito e vale o pequeno esforço para instalar o hotfix do VS 2008.
No entanto, para quem está usando o ASP.NET MVC alguns problemas persistem.
Normalmente fazemos referência ao JQuery na MasterPage e por padrão o link fica dessa forma:
<script src="../../Scripts/jquery.js" type="text/javascript"></script>
A Masterpage de aplicações MVC esta em (root)/Views/Shared. Se temos uma view que está respondendo no mesmo nível (por exemplo, (root)Views/Home/Index.aspx), a chamada acima funciona normalmente. No entanto, se temos views em outros niveis ou se nosso site está em subdiretório (como por exemplo, este blog que está em http://www.bizness.com.br/weblog) começamos a ter problemas.
Para resolver isso, podemos usar um método do framework MVC para renderizar o caminho relativo em runtime:
<script src="<%=Url.Content("~/Scripts/jquery.js")%>" type="text/javascript"></script>
Agora criamos outro problema: o intellisense não reconhece essa forma de chamar o script.
Para contornar, podemos usar uma chamada falsa ao javscript:
<script src="<%=Url.Content("~/Scripts/jquery.js")%>" type="text/javascript"></script>
<%if (false)
{ %>
<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<%} %>
Tabajara code detected!! Sim, um tanto freak, mas resolve. Como estamos isolando a segunda chamada por um if que sempre retorna falso ela nunca será renderizada na página final, mas em modo design será reconhecida pelo intellisense.
Adaptei a dica que Jeff King deu para que usercontrols .ascx tenham intellisense do Jquery quando a chamada para ele está na masterpage. (os aspx tratam as chamadas que estão na masterpage, mas os ascx não, pois eles não estão ligados a uma página ou masterpage específicos.