2008-09-17 3 views
4

Zum Beispiel, wenn ich eine Seite in Views/Home/Index.aspx und eine JavaScript-Datei unter Views/Home/habe Index.js, wie verweisen Sie dies auf der Aspx-Seite?Wie verweisen Sie auf .js-Dateien, die sich in den View-Ordnern von einer Seite befinden, die Asp.net MVC verwendet

Das Beispiel funktioniert unten nicht, obwohl der Compiler sagt der Pfad

korrekt ist
<script src="Index.js" type="text/javascript"></script> 

Genau das gleiche Problem wurde im Detail hier gepostet: http://forums.asp.net/p/1319380/2619991.aspx

Ist dies nicht momentan ist möglich, wird es in der Zukunft sein? Wenn nicht, wie verwalten alle ihre Javascript-Ressourcen für große Asp.net MVC-Projekte? Erstellen Sie einfach eine Ordnerstruktur im Ordner "Content", der die Struktur Ihres View-Ordners widerspiegelt? YUCK!

Antwort

1

Für freigegebene Javascript-Ressourcen mit dem Content-Ordner macht Sinn. Das Problem war, ich versuchte speziell zu lösen, war aspx Seite spezifische Javascript, die nie wieder verwendet werden würde.

Ich denke, was ich nur tun muss, ist die aspx Seite spezifische Javascript rechts auf die Seite selbst und halten Sie die freigegebenen js Ressourcen in den Ordner Inhalt.

+0

Ich bin auf der Suche nach dem gleichen Ansatz wie Sie. Hast du etwas anderes gefunden, als in die Seite zu stopfen oder den Inhalt zu ergänzen? – Owen

+0

Ich habe gerade das gleiche Problem heute getroffen. Stimmen Sie vollständig mit Ihrem "YUCK" in Ihrem ursprünglichen Beitrag überein. Aber es auf die Seite selbst zu setzen ist noch ekliger, denke ich! Meine ersten Gedanken waren, dass es möglicherweise das Routing war, das verhinderte, dass js-Dateien im Ordner "Views" geliefert wurden. Hattest du am Ende Erfolg dabei? –

3

Sie können die VirtualPathUtility.ToAbsolute Methode wie unten verwenden, um die App relative URL der JS-Datei auf einen absoluten ein zu konvertieren, die auf der Seite geschrieben werden können:

<script type="text/javascript" src="<%=VirtualPathUtility.ToAbsolute("~/Views/Home/Index.js") %>"></script> 
+0

habe ich versucht, dass und es scheint nicht zu funktionieren. Es erzeugt, was ich erwarten würde, die richtige URL zu sein, aber aus irgendeinem Grund kann nicht die js-Datei finden. – Vyrotek

1

Sie sollten Ordnerstruktur getrennt haben für Skripte. Zum Beispiel JavaScript-Ordner unter dem Anwendungsstammverzeichnis. Das Speichern von js-Dateien mit Ansichten wirkt sich nicht nur auf Probleme mit dem Pfad aus, sondern wirkt sich auch auf die Sicherheit und die Berechtigungen aus. Außerdem ist es viel einfacher, später JS-Dateien als Assemblierungsressourcen einzubetten, wenn Sie sich entschließen, einige Ihrer Anwendungsteile später separat zu deployen, wenn sie in einem dedizierten Unterordner gespeichert werden.

1

Hier ist eine schöne Erweiterung Methode für Htmlhelper:

public static class JavaScriptExtensions 
{ 
    public static string JavaScript(this HtmlHelper html, string source) 
    { 
     TagBuilder tagBuilder = new TagBuilder("script"); 
     tagBuilder.Attributes.Add("type", "text/javascript"); 
     tagBuilder.Attributes.Add("src", VirtualPathUtility.ToAbsolute(source)); 
     return tagBuilder.ToString(TagRenderMode.Normal); 
    } 
} 

es wie folgt verwendet:

<%=Html.JavaScript("~/Content/MicrosoftAjax.js")%> 
0

Wenn Sie Ihre Seiten eine neue Route zu einem benutzerdefinierten RouteHandler, Sie auf die Existenz von Dateien überprüfen vor dem Behandeln des RequestContext zu der MvcHandler-Klasse.

Beispiel (nicht vollständig):

public class RouteHandler : IRouteHandler 
{ 
    public IHttpHandler 
    GetHttpHandler(RequestContext requestContext) 
    { 
     var request = requestContext.HttpContext.Request; 

     // Here you should probably make the 'Views' directory appear in the correct place. 
     var path = request.MapPath(request.Path); 
     if(File.Exists(path)) { 
      // This is internal, you probably should make your own version. 
      return new StaticFileHandler(requestContext); 
     } 
     else { 
      return new MvcHandler(requestContext); 
     } 
    } 
} 
Verwandte Themen