Qual é o melhor lugar (qual pasta, etc) para colocar arquivos javascript específicos da visualização em um aplicativo ASP.NET MVC?
Para manter meu projeto organizado, eu realmente adoraria colocá-los lado a lado com os arquivos .aspx da visualização, mas não encontrei uma boa maneira de referenciá-los ao fazer isso sem expor o ~ / Views / Ação / estrutura de pastas. É realmente ruim permitir que detalhes dessa estrutura de pastas vazem?
A alternativa é colocá-los nas pastas ~ / Scripts ou ~ / Content, mas é um pouco irritante porque agora tenho que me preocupar com conflitos de nome de arquivo. É uma irritação que posso superar, no entanto, se for "a coisa certa".
asp.net-mvc
Erv Walter
fonte
fonte
Respostas:
Pergunta antiga, mas gostaria de responder no caso de alguém vir procurá-la.
Eu também queria meus arquivos js / css específicos de visualização na pasta de visualizações, e foi assim que fiz:
Na pasta web.config na raiz de / Views, você precisa modificar duas seções para permitir que o servidor da web exiba os arquivos:
Então, a partir do seu arquivo de visualização, você pode referenciar os urls conforme o esperado:
Isso permitirá a exibição de arquivos .js e .css e proibirá a exibição de qualquer outra coisa.
fonte
Uma maneira de conseguir isso é fornecer o seu próprio produto
ActionInvoker
. Usando o código incluído abaixo, você pode adicionar ao construtor do seu controlador:Agora, sempre que você colocar um
.js
arquivo próximo à sua visualização:Você pode acessá-lo diretamente:
Abaixo está a fonte:
fonte
Você pode inverter a sugestão de davesw e bloquear apenas .cshtml
fonte
Site.Master
. A lista de permissões parece a abordagem mais seguraSei que este é um tópico bastante antigo, mas gostaria de acrescentar algumas coisas. Tentei a resposta de davesw, mas ele estava gerando um erro 500 ao tentar carregar os arquivos de script, então tive que adicionar isso ao web.config:
para system.webServer. Aqui está o que eu tenho e consegui fazer funcionar:
Aqui estão mais informações sobre validação: https://www.iis.net/configreference/system.webserver/validation
fonte
adicione este código no arquivo web.config dentro da tag system.web
fonte
Também queria colocar os arquivos js relacionados a uma visualização na mesma pasta da visualização.
Não fui capaz de fazer as outras soluções neste segmento funcionarem, não que elas estejam quebradas, mas sou muito novo no MVC para fazê-las funcionar.
Usando as informações fornecidas aqui e várias outras pilhas, encontrei uma solução que:
Observação: também estou usando o roteamento de atributo HTTP. É possível que a rota usada na minha alma possa ser modificada para funcionar sem habilitar isso.
Dado o seguinte exemplo de estrutura de diretório / arquivo:
Usando as etapas de configuração fornecidas abaixo, combinadas com a estrutura do exemplo acima, o URL de visualização de teste seria acessado por meio de:
/Example/Test
e o arquivo javascript seria referenciado por meio de:/Example/Scripts/test.js
Etapa 1 - Habilitar Roteamento de Atributo:
Edite seu arquivo /App_start/RouteConfig.vb e adicione
routes.MapMvcAttributeRoutes()
logo acima das rotas existentes.MapRoute:Etapa 2 - configure seu site para tratar e processar /{controller}/Scripts/*.js como um caminho MVC e não um recurso estático
Edite seu arquivo /Web.config, adicionando o seguinte à seção system.webServer -> handlers do arquivo:
Aqui está novamente com contexto:
Etapa 3 - Adicione o seguinte resultado de ação de scripts ao arquivo do controlador
Você precisará copiar isso para cada um dos arquivos do controlador. Se você quiser, provavelmente há uma maneira de fazer isso como uma configuração de rota única e única.
Para contexto, este é meu arquivo ExampleController.vb:
Notas finais Não há nada de especial sobre os arquivos javascript test.vbhtml view / test.js e não são mostrados aqui.
Eu mantenho meu CSS no arquivo de visualização, mas você pode facilmente adicionar a esta solução para que possa referenciar seus arquivos CSS de maneira semelhante.
fonte