2010-11-17 4 views
1

Disons que j'ai un fichier situé au C:\foo\bar.js et que je souhaite inclure ce fichier dans un site Web ASP.NET MVC qui, évidemment, est hébergé sur la même machine.Traitement d'un fichier local dans un site Web ASP.NET MVC

Cela ne fonctionne pas:

<script src="C:\foo\bar.js"></script> 

Et ni ce que cela:

<script src="file:///C:/foo/bar.js"></script> 

Les deux lignes ci-dessus ne font pas de sens non plus car ils regarderaient le dossier du client, pas le serveur de dossier.

Alors, comment puis-je servir ce fichier à partir d'un contrôleur ASP.NET MVC (dans le contrôleur, j'ai la valeur de chaîne du chemin du fichier physique local, c'est-à-dire C:\foo\bar.js) à une vue? Peut-être quelque chose avec un HttpHandler?

+0

FYI: Vous pouvez rencontrer des problèmes de sécurité du navigateur lorsque vous faites cela. Mais alors, si vous servez une page Web qui repose sur des fichiers se trouvant à un endroit particulier sur le disque des utilisateurs ... –

+0

Non, les fichiers ne seront pas sur le disque des utilisateurs; les fichiers que je vais servir seront sur la machine hébergeant le site, mais pas dans le répertoire virtuel, donc ils ne sont pas exposés via le serveur web. –

Répondre

3

Remarque: Cette solution suppose que le fichier js ne fait pas partie de l'application Web. Dans ce cas, vous devriez probablement en utilisant Url.Content ou ResolveClientUrl au lieu ..

Vous devriez être en mesure de créer un lien vers une action contrôleur URL dans votre balise script:

<script src="/ControllerName/GetJavascriptFile"></script> 

... et ont une action comme ::

public ActionResult GetJavascriptFile() { 
    string mp = @"C:\foo\bar.js"; 
    return File(mp, "text/javascript"); 
} 

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file(VS.90).aspx

+0

Pourquoi le détour par un contrôleur? –

+2

Peut-être que j'ai mal lu .. mais il semble que le fichier de script ne fait pas partie de l'application web. Sinon, inclure un script devrait être trivial. – markt

+1

C'est l'impression que j'ai eue, d'où le +1. Il semblait que le PO demandait comment inclure un fichier qui n'est pas réellement exposé par le serveur Web. – David

1

la façon dont je l'ai fait est - supposons que vous avez un dossier appelé Scripts hors de la racine (donc, paralle l à Controllers, Models, etc.) et que vous stockez les fichiers JavaScript dans, vous pouvez utiliser ceci:

<script 
src="<%=Url.Content("~/Scripts/jQuery-1.3.2.js")%>" 
type="text/javascript"> 
</script> 

(divisé sur plusieurs lignes pour le rendre plus facile à lire)

Cela suppose votre question est de savoir comment lier à l'emplacement des fichiers include .js, mais une astuce similaire peut être appliquée à tous les fichiers de contenu (ie, installateurs de plugins ou autres)

+0

Le problème est que les fichiers que je veux servir ne font pas partie du répertoire virtuel contenant le site. –

Questions connexes