Pergunta

Estou tentando acessar um arquivo .js no diretório de visualizações. Eu tenho um aplicativo MVC com /Views/home/mycontrol.ascx eu tenho um arquivo js /views/home/mycontrol.js

Desejo fazer referência ao arquivo .js e mantê -lo com o controle. Eu tentei as seguintes entradas no roteamento e nenhuma parece funcionar.

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });

Por favor, ajude, não sugira adicionar o arquivo .js ao diretório de scripts. Eu gostaria de fazê -lo funcionar dessa maneira ou saber por que isso não pode ser feito.

Eu colocaria o script na página, apenas a depuração do script está quebrada no VS2010 B2.

Obrigado Atenciosamente Craig.

Foi útil?

Solução

o Views A pasta é, bem, para visualizações, e o JavaScript deve ser colocado em outro lugar. É por isso que os designers da estrutura do MVC colocam um web.config nisso Views Pasta que nega o acesso a qualquer arquivo dentro. Você pode modificar essa configuração de festas, mas estar avisado de que esse pode ser um potencial buraco de segurança. Então abra o web.config arquivo localizado no Views pasta e:

Substituir:

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

com:

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

Navegar para http://yoursite/Views/test.js

Ps você também pode remover todos os IgnoreRoutes você coloca global.asax.

Outras dicas

Não seria uma solução melhor usando o DefaultTtphandler para recursos HTML e mantendo o HttpnotfoundHandler para todos os outros tipos de arquivo

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

Na verdade, para o modo integrado do IIS, você precisa usar System.Web.StaticHttpHandler:

<httpHandlers>
  <add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers>

Aparentemente System.Web.DefaultHttpHandler Funciona apenas no modo clássico do IIS.

No MVC 4, tive que atualizar a seção Handler, bem como a seção Httphandlers.

Atualizei o web.config na pasta Views com a seguinte.

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<handlers>
  <remove name="BlockViewHandler" />
  <add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  <add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top