2011-11-09 9 views
5

Ho i miei file js all'interno delle aree e non riesco ad accedervi. Quando li sposto fuori dalle aree MVC, posso accedere.Posso distribuire un file javascript nelle aree MVC?

Ho provato quanto segue:

  • Diverso denominazione dei file js - non risolve problema
  • controllare per vedere se esistono sul server - che fanno
  • file di
  • accesso direttamente dall'interno Gestore IIS sul server - non si apriranno e restituiranno non trovato
  • Accedi agli stessi file direttamente dal gestore IIS sul server ma quando i file sono nella directory di script - Si aprono nel browser
  • Utilizzato t egli checker percorso - Quando provo ad accedere al file non si apre il debug percorso e invece dice solo "404"

questo funziona:

<script src="@Url.Content("~/Scripts/jquery/_Roles.js")" type="text/javascript"></script> 

Questo non funziona:

<script src="@Url.Content("~/Areas/Administration/Scripts/Roles/_Roles.js")" type="text/javascript"></script> 

Potrebbe esserci qualcosa di diverso sui file nella cartella Aree che blocca gli script?

+0

Perché si utilizzano caratteri di sottolineatura nei nomi dei file? – ZippyV

+0

Convention per me. Comunque lo cambierò probabilmente. Ad ogni modo ho notato che ho ancora lo stesso problema. Quando implementato la mia applicazione non ama gli script in Aree. tuttavia, eseguito localmente sul server dev, va bene. –

+1

@SamanthaJ cosa rende il rendering di @ Url.Content() sul lato client? Forse il tuo problema sta lì. – shuniar

risposta

-3

Perché mettere i vostri script nella sezione Aree? Ho anche un sito mvc con un'area, ma mantengo i miei script nella cartella Scripts.

Il mio suggerimento è di ripensare il motivo per cui stai organizzando il tuo contenuto in questo modo e prendere in considerazione lo spostamento di tutti i file .js esterni nella cartella Scripts.

+2

Posso pensare ad almeno un motivo: impedire agli utenti senza privilegi amministrativi di leggere gli script del pannello di amministrazione che potrebbero dare loro alcune idee su cosa sta succedendo lì (percorsi, funzionalità, ecc.). In realtà sono venuto qui alla ricerca di informazioni su come archiviare gli script all'interno di un'area MVC ... –

+12

Un'area è un raggruppamento logico di funzionalità, quindi, a parte i problemi di implementazione, perché non vuoi inserire lo script di Area specifica in una cartella Area? Sembra un buon senso per me. –

+2

Se l'architettura segue lo stile SOA dell'utilizzo di componenti aziendali autonomi, questo ha un significato ragionevole –

0

Avere si tenta

ResolveUrl(

invece di

Url.Content( 

?

Stefano

+0

Lo proverò ora. Il codice è in esecuzione su Azure, quindi saranno necessari 15 minuti per il caricamento. Controllando i documenti non sono sicuro che sarà d'aiuto come dice: Se il parametro relativaUrl contiene un URL assoluto, l'URL viene restituito invariato. Se il parametro relativeUrl contiene un URL relativo, tale URL viene modificato in un URL relativo corretto per il percorso della richiesta corrente, in modo che il browser possa risolvere l'URL. –

0
<script type="text/javascript" src='<%: ResolveUrl("~/Scripts/jquery/_Roles.js") %>'> 
</script> 
1

Trovato una risposta in another Stack Overflow question e ottimizzato per le aree.

file di

Modifica /Areas/AreaName/Views/web.config per abilitare il server web per servire JS e CSS file:

<system.web> 
    <httpHandlers> 
     <add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 
    <!-- other content here --> 
</system.web> 

<system.webServer> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    <!-- other content here --> 
</system.webServer> 

Ciò consentirà al servizio di Js e file css, e impedirà al servizio di qualsiasi altra cosa

+0

Ho aggiunto queste modifiche al web.config che risiede in /Areas/AreaName/web.config e funziona altrettanto bene. – BrandonG

Problemi correlati