2010-05-19 6 views
5

Ho un numero di file .js che vorrei essere memorizzato nelle stesse directory delle loro viste (sono specifici per una vista - è semplicemente per mantenere il javascript separato dall'HT della vista)ASP.NET MVC - Dove metti i tuoi file .js se non vuoi salvarli in/Scripts?

Tuttavia , aggiungendoli al /Views/ControllerName/ directory non funzionerà, perché quando viene effettuata una richiesta al server web per il file .js:

<script type="text/javascript" src="/Views/ControllerName/myscript.js"></script> 

sarebbe in sostanza essere mirato al controllo 'Visualizzazioni' che ovviamente pretende molto esistere.

Aggiornamento

Da quello che ho letto, aggiungendo la seguente IgnoreRoute nel metodo Global.asax.cs RegisterRoutes dovrebbe permettere l'accesso a qualsiasi richiesta di file .js:

routes.IgnoreRoute("{resource}.js/{*pathInfo}"); 

Tuttavia, non riesco a farlo funzionare?

+0

La tua risposta non ha funzionato per me. Questo mi ha aiutato: http://stackoverflow.com/questions/9626611/placing-js-files-in-the-views-folder –

risposta

3

risolto

Dopo aver trovato e testato una serie di messaggi (la maggior parte conclusiva posta here) che ho potuto andare al lavoro, il seguente risolve l'enigma:

Nel Global.asax, aggiungere il seguente codice al metodo RegisterRoutes:

routes.IgnoreRoute("{file}.js"); 

V'è un grande post qui che descrive questo ed ulteriore attività here

-1

Contempla l'ultima frase del tuo - potrebbe essere il motivo per cui una directory specifica (/ Scripts /) è stata messa da parte per questi? ;)

0

Hai due opzioni, penso.

  1. Ricreare la struttura della cartella Viste sotto script e memorizzarli nella stessa posizione relativa nella directory degli script.
  2. Non tenerli in file separati, ma utilizzare ContentPlaceHolders separati nella pagina MasterPage per una sezione di script (in genere nella parte inferiore del corpo).

È possibile anche memorizzarli in una delle cartelle non "speciali", ma penso che gli script siano il posto giusto se li si tiene separati.

Conservo normalmente script comuni (utilizzati da più di una pagina) nella cartella degli script, senza una gerarchia di viste corrispondenti e script specifici della pagina nel file di visualizzazione, ma in un ContentPlaceHolder separato. Per me l'importante è non mantenere il JS in un file separato, ma separato dal contenuto. L'utilizzo di un ContentPlaceHolder diverso lo fa.

+0

Il motivo per cui voglio mantenere il javascript in un file è perché il browser lo memorizzerà nella cache. In linea javascript non può essere memorizzato nella cache. Per favore correggimi se sbaglio! Grazie – Jimbo

+0

@Jimbo - hai davvero abbastanza javascript specifici per la pagina per preoccuparti che il browser lo memorizzi nella cache?Inoltre, non dimenticare che genererai una richiesta in più sincrona per ogni file javascript. Nella mia esperienza non ho più di poche centinaia di byte, certamente non più di 1K byte di javascript per pagina. Con la compressione di output abilitata, non vale la pena di dover gestire file separati. – tvanfosson

+0

Infatti, gli script per queste pagine sono fino a 20kb e le connessioni che gli utenti utilizzeranno verranno eseguiti a circa 1,5 kb/s :( Sapete come aggiungere un gestore di route per ignorare le richieste di file .js? – Jimbo